Тема: Где сохраняется Поворот Текста???

Привет всем, коллеги!
Не может ли кто подсказать,
где (в переменной нет, я знаю!) сохраняется
значение угла поворота текста ТЕКСТ и ДТЕКСТ?
Высота текущая сохраняется в течении сеанса и в конце его
сохраняется в файле.
Поворот живет только в сеансе.
ТАК ГДЕ же он в этот момент живет,
и как до него добраться???

Re: Где сохраняется Поворот Текста???

Я полагаю, что угол поворота сохраняется в списке аргументов глобальной функции acedCommand (смотри ObjectARX)

Re: Где сохраняется Поворот Текста???

О!
Спасибо!
Попробуем поковырять!
Как-то с ним, c ARX'ом этим...
; )

Re: Где сохраняется Поворот Текста???

Может лиспом обойтись?

;;;Ф-ция возвращает угол поворота текста в виде списка
;;;(угол_в_радианах угол_в_градусах)
(defun povorot_texta ( / ug)
(if (zerop (cdr (assoc 40 (tblsearch "STYLE" (getvar "TEXTSTYLE")))))
  (COMMAND "_TEXT" "0,0" 1.0 "" "TEST") ;_ нулевая высота текста Будет запрос высоты
  (COMMAND "_TEXT" "0,0" "" "TEST")     ;_ фиксированнная высота Запроса не будет
  );_end of if
 (setq ug (cdr(assoc 50 (entget(entlast)))))
 (entdel(entlast))
 (list ug (/ (* ug 180.0) pi)))
;;;Пример
(defun c:TEST ( / ug)
  (setq ug (povorot_texta))
  (princ "\nТекущий угол поворота: ")
  (princ (car ug))(princ " радиан или ")
  (princ (cadr ug))(princ " градусов")
  (princ)
  )

Ф-ция не сработает, если заблокирован текущий слой

Re: Где сохраняется Поворот Текста???

То-то и оно, что DXF-код в стиле текста определяет Oblique angle, то есть угол наклона букв, а угла поворота текста относительно координатных осей там нет!

Re: Где сохраняется Поворот Текста???

1.
"Есть, ЕСТЬ такая буква в этом слове!!!"
DXF50 - Угол поворота
DXF51 - Угол НАКЛОНА
2.
Все понятно, парни.
Только надеялся, что чего-то не понял и лазейка есть (в LISP'е!).
Хочется и опрашивать и задавать для поворота значение.
НЕ создавая бедный текст и не убивая его - ЖАЛКО!!!

Re: Где сохраняется Поворот Текста???

По-моему, есть еще переменные, которые нигде не сохраняются.

Re: Где сохраняется Поворот Текста???

А зачем вообще при программировании знать какие-то переменные, "отвечающие" за угол поворота текста? Не нужно это вообще!
Есть текстовый стиль, но это для пользователей, а не для программистов. Программно создаются текстовые примитивы. Часть свойств у них принимается по умолчанию из текущего текстового стиля. Например, угол наклона, шрифт. Но само значение текстовой строки, угол поворота и высота должны задаваться программой.
Если использовать для текста функцию command (vl-cmdf), то надо заглядывать в описание стиля, чтобы передать нужное количество аргументов. Например:

(defun ru-text-draw (txt pnt height rotation justification)
  (ru-var-clear-osnap)
   (if (= (cdr (assoc 40 (tblsearch "STYLE" (getvar "TEXTSTYLE"))))
      0.0
       ) ;_ end of =
     (progn
     ;; нулевая высота текста
       (if justification
     (vl-cmdf "_.TEXT" "_J" justification pnt height rotation txt)
     (vl-cmdf "_.TEXT" pnt height rotation txt)
       ) ;_ end of if
     ) ;_ end of progn
     (progn
       ;; фиксированнная высота
       (if justification
     (vl-cmdf "_.TEXT" "_J" justification pnt rotation txt)
     (vl-cmdf "_.TEXT" pnt rotation txt)
       ) ;_ end of if
     ) ;_ end of progn
   ) ;_ end of if
  (ru-lw-set-for-ent (entlast) (ru-lw-calc-for-text height))
  (ru-var-restore-osnap)
  (entlast)
)

Здесь еще применены функции отключения и восстановления объектной привязки и установка "правильного" веса линии. Но угол поворота передается аргументом.
А это вариант создания текста объектным методом (предпочтительный):

(defun ru-text-add (txt pnt height rotation justification / obj)
  ;|
justification:
 0 acAlignmentLeft
 1 acAlignmentCenter
 2 acAlignmentRight
 3 acAlignmentAligned
 4 acAlignmentMiddle
 5 acAlignmentFit
 6 acAlignmentTopLeft
 7 acAlignmentTopCenter
 8 acAlignmentTopRight
 9 acAlignmentMiddleLeft
10 acAlignmentMiddleCenter
11 acAlignmentMiddleRight
12 acAlignmentBottomLeft
13 acAlignmentBottomCenter
14 acAlignmentBottomRight
|;
  (if (null justification)
    (setq justification acalignmentleft)
  ) ;_ end of if
  (ru-error-catch
    (function
      (lambda ()
        (setq
          obj
           (vla-addtext
             (ru-obj-active-space)
             txt
             (if
               (or (= justification acalignmentaligned)
                   (= justification acalignmentfit)
               ) ;_ end of or
                (vlax-3d-point (car pnt))
                (vlax-3d-point pnt)
             ) ;_ end of if
             height
           ) ;_ end of vla-AddText
        ) ;_ end of setq
        (ru-lw-set-for-obj obj (ru-lw-calc-for-text height))
        (cond
          ((= justification acalignmentleft)
           (vla-put-rotation obj rotation)
          )
          ((or (= justification acalignmentaligned)
               (= justification acalignmentfit)
           ) ;_ end of or
           (vla-put-alignment obj justification)
           (vla-put-textalignmentpoint
             obj
             (vlax-3d-point (cadr pnt))
           ) ;_ end of vla-put-textalignmentpoint
          )
          (t
           (vla-put-alignment obj justification)
           (vla-put-textalignmentpoint obj (vlax-3d-point pnt))
           (vla-put-rotation obj rotation)
          )
        ) ;_ end of cond
        (vla-update obj)
        obj
      ) ;_ end of lambda
    ) ;_ end of cond
    (function (lambda (x) (princ (strcat "\nОШИБКА RU-TEXT-ADD: " x)) nil))
  ) ;_ end of ru-error-catch
) ;_ end of defun

Здесь поворот задается также аргументом
И вариант создания текста через entmake

(defun ru-text-entmake (txt pnt height rotation justification / ent_list)
  (setq    ent_list (list    '(0 . "TEXT")
         '(100 . "AcDbEntity")
         '(100 . "AcDbText")
         (list 10 (car pnt) (cadr pnt) 0.0)
         (cons 1 txt)
         (cons 40 height)
         ;;(cons 7 "RU_CAD")
         (if justification
           (cond
             ((= justification "C")
              '(72 . 1)
             )
             ((= justification "R")
              '(72 . 2)
             )
             ((= justification "A")
              '(72 . 3)
             )
             ((= justification "M")
              '(72 . 4)
             )
             ((= justification "F")
              '(72 . 5)
             )
             (t
              '(72 . 0)
             )
           ) ;_ end of cond
           '(72 . 0)
         ) ;_ end of if
         (cons 50 rotation)
         (list 11 (car pnt) (cadr pnt) 0.0)
       ) ;_ end of list
   ) ;_ end of setq
   (setq ent_list (entmake ent_list))
   (ru-lw-set-for-ent (entlast) (ru-lw-calc-for-text height))
  (entlast)
)

Re: Где сохраняется Поворот Текста???

Доброго времени суток!
-----------------------
Прошу прощения за задержку -
не было возможности!
> А зачем вообще при программировании знать
> какие-то переменные, "отвечающие" за угол
> поворота текста? Не нужно это вообще!
Ага! Ну да! Ясно!
Чего ShaggyDoc'у не надо, того и всем
знать и хотеть незачем. Узнаю!
На будущее: вместо нотаций желателен ответ на вопрос, если, конечно, ответ существует.
Приветствуются так же и СОВЕТЫ.
Теперь по существу:
А нам-то все равно хотелось бы.
И дело не в создании НОВОЙ строки.
Это мы уже давно с божьей помощью освоили.
Хотелось ЗАДАТЬ именно это значение
и именно программно!
И привести его к "0", чтобы юзер не парился.
И не хотелось создавать текст-пустышку.
Спасибо за ваши мысли!

Re: Где сохраняется Поворот Текста???

Переменных, насколько я знаю, нет. Проще создать текст и потом задать ему угол поворота. Либо поворачивать текущую UCS относительно оси Z на нужный угол и потом возвращать обратно. Второй путь чреват большими трудностями по обработке ошибок, к примеру. Да и панику может вызывать...

Re: Где сохраняется Поворот Текста???

;)
Согласен насчет паники!

Re: Где сохраняется Поворот Текста???

Александр пишет:

Чего ShaggyDoc'у не надо, того и всем
знать и хотеть незачем. Узнаю!

Хотеть не вредно. Но если браться за программирование, то надо понимать, что в каждой программе могут быть свои переменные. В самом первом вопросе был и ответ  - "Поворот живет только в сеансе". То есть в какой-то переменной.
И не ShaggyDoc решает надо или не надо знать эту переменную, а программисты Autodesk. Например, решили, что надо знать высоту текста по умолчанию - поместили ее в системную переменную TEXTSIZE. А с поворотом решили этого не делать. Возможно, когда-то откроют, как уже произошло с некоторыми значениями по умолчанию.
Если есть подозрения, что существует какая-то переменная, то достаточно просмотреть справку. Можно также воспользоваться утилитой acadinfo, в которой будут показаны все глобальные переменные, в том числе недокументированные.

На будущее: вместо нотаций желателен ответ на вопрос, если, конечно, ответ существует.
Приветствуются так же и СОВЕТЫ.

Набор конкретных кодов это "нотации"? В примерах ясно показывается, что поворот задается для каждого текстового объекта?
Причем здесь, "чтобы юзер не парился"? Париться-то должен программист. Например, предусмотреть в своей программе поворот по умолчанию 0, так как большая часть текстов пишется именно так.
Здесь не надо искать мифическую переменную - сделаете свою.
А СОВЕТ (приветствуемый) один - RTFM

Re: Где сохраняется Поворот Текста???

> ShaggyDoc
У меня ощущение, что где-то в dxf reference я натыкался на группу последнего поворота, но где конкретно -найти так и не смог.

Re: Где сохраняется Поворот Текста???

Мне кажется что ACAD не хранит нигде угол поворота
Если введите текст под каком то угле то после етого ACAD берет угол последнего текстта, но только в текущем сеансе. При новом откритие файла ето не влияет

Re: Где сохраняется Поворот Текста???

Элементарный пример:

(defun C:УГОЛ ( / angle)
(if (not angle0) (setq angle0 "0"))
(princ (strcat "\n Угол поворота <" angle0 ">: "))
(setq angle (getreal))
(if (= angle nil) (setq angle angle0) (setq angle0 (rtos angle)))
(princ)
)

Последнее введенное значение угла поворота будет сохраняться только в течение сеанса работы с AutoCAD'ом.

Re: Где сохраняется Поворот Текста???

При введение команди "TEXT" ACAD подсвечивает последний текст и если нажимаеш 'ENTER' принимает его параметри.

Re: Где сохраняется Поворот Текста???

> Станчев
А если не нажимаешь Enter и указываешь точку?

Re: Где сохраняется Поворот Текста???

> kpblc
Не-а!
Встречается Последняя Высота, а не Поворот!
;)
DXF42 Таблицы Текстового Стиля...

Re: Где сохраняется Поворот Текста???

> Александр
Ну так а откуда он ее берет-то?! Ведь явно хранится в каком-то хитром месте... Осталось совсем чуть-чуть - найти это место :)

Re: Где сохраняется Поворот Текста???

> kpblc
Ты хочешь сказать, что глобальные переменные могут существовать только в AutoLisp'e?

Re: Где сохраняется Поворот Текста???

> Владимир Громов
Ну вот, весь кайф сломал :)

Re: Где сохраняется Поворот Текста???

> kpblc
Ну, тогда скажи мне, почему значение переменной OFFSETDIST нигде не сохраняется?

Re: Где сохраняется Поворот Текста???

Я ж не автодеск, откуда я знаю;)?

Re: Где сохраняется Поворот Текста???

Вот и получается, что в принципе могут существовать переменные, которые нигде не сохраняются, а переменную для угла поворота текста забыли задокументировать.

Re: Где сохраняется Поворот Текста???

Сейчас сам столкнулся с такой проблемой. Записал в конце программы и в обработчик ошибок пару строк:

(vl-cmdf "_TEXT" "0,0" "" "0" "1")
(entdel (entlast))

Проблема решилась.