Как получить координаты рамки text?
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как получить координаты рамки text?

Как получить координаты рамки text?

Ответ
Поиск в этой теме
Непрочитано 16.08.2010, 13:26 #1
Как получить координаты рамки text?
mamuk
 
Сургут
Регистрация: 06.05.2010
Сообщений: 248

доброго времени суток! как можно получить координаты рамки текста?
в Книге Кудрявцева Е.М. написано textbox возвращает диагональные координаты рамки текста, пробовал такое проделать через
( setq a (enget( entlast)))
(textbox а)
получаю (такой результат и в хелпе описан, как я понял( хоть и с английским туговато))
((0.0 -7.10543e-015 0.0) (25.0 5.0 0.0))
где координатами и не пахнет
можно ли извлечь координаты с помощью textbox?
всем спасибо за внимание!
Просмотров: 6582
 
Непрочитано 16.08.2010, 13:31
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,431


Вообще-то оно выдало как раз координаты Первый подсписок - левая нижняя точка; второй подсписок - верхняя правая.
Хотя вообще-то textbox не обрабатывает все возможные варианты написания многострочников, и на нем можно очень неплохо "обжечься". Я бы подумывал об использовании vla-getboundingbox с последующим преобразованием точек.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 16.08.2010, 13:51
#3
mamuk


 
Регистрация: 06.05.2010
Сургут
Сообщений: 248


(25.0 5.0 0.0) разве не длина текста 25.00, 5.00 высота, 0. угол поворота.?
далеко не силен в lispe т.к. принялся его изучать не давно
(0.0 -7.10543e-015 0.0) что это за координаты, когда графически там видны другие, я имею ввиду когда курсор подвожу к нижней рамки?
или я заблуждаюсь?
(текст использовал однострочный)
mamuk вне форума  
 
Непрочитано 16.08.2010, 13:59
#4
ытя


 
Регистрация: 23.09.2005
СПб
Сообщений: 428


textbox возвращает координаты, относительно точки вставки текста.
ытя вне форума  
 
Непрочитано 16.08.2010, 14:09
#5
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,431


Попробуй выполнить такой код:
Код:
[Выделить все]
(vl-load-com)
(defun test (/ ent lst vertex_lst ins)
  (if (and (= (type (setq ent (vl-catch-all-apply
                                (function
                                  (lambda ()
                                    (car (entsel "\nУкажите текст <Отмена> : "))
                                    ) ;_ end of lambda
                                  ) ;_ end of function
                                ) ;_ end of vl-catch-all-apply
                          ) ;_ end of setq
                    ) ;_ end of type
              'ename
              ) ;_ end of =
           (= (cdr (assoc 0 (entget ent))))
           ) ;_ end of and
    (progn
      (setq lst        (textbox (entget ent))
            ins        (cdr (assoc 10 (entget ent)))
            vertex_lst (mapcar
                         (function
                           (lambda (x)
                             (mapcar '+ ins x)
                             ) ;_ end of lambda
                           ) ;_ end of function
                         (list (car lst)
                               (list (caadr lst) (cadar lst))
                               (cadr lst)
                               (list (caar lst) (cadadr lst))
                               ) ;_ end of list
                         ) ;_ end of mapcar
            ) ;_ end of setq
      (entmakex (append (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100
                                                                          .
                                                                          "AcDbPolyline"
                                                                          ) '(90 . 4) '(70 . 1) '(43 . 0.0) '(38 . 0.0)
                              '(39 . 0.0) '(210 0.0 0.0 1.0)) ;_ end of list
 ;_ end of list
                        (mapcar '(lambda (x) (cons 10 x)) vertex_lst)
                        ) ;_ end of append
                ) ;_ end of entmakex
      ) ;_ end of progn
    ) ;_ end of if
  ) ;_ end of defun
> ытя: по-моему, не совсем.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 16.08.2010, 14:14
#6
mamuk


 
Регистрация: 06.05.2010
Сургут
Сообщений: 248


ну точка вставки текста у меня допустим 100,100,0
он мне дожен вернуть (100,100,0) ( 105,125,0) так я понимаю?
mamuk вне форума  
 
Непрочитано 16.08.2010, 14:20
#7
ытя


 
Регистрация: 23.09.2005
СПб
Сообщений: 428


Из Help-а
Цитата:
Return Values

A list of two points, if successful; otherwise nil.

The points returned by textbox describe the bounding box of the text object as if its insertion point is located at (0,0,0) and its rotation angle is 0. The first list returned is generally the point (0.0 0.0 0.0) unless the text object is oblique or vertical, or it contains letters with descenders (such as g and p).
ытя вне форума  
 
Непрочитано 16.08.2010, 14:21
#8
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,431


Ну дык! Границы прямоугольника для текста, вставленного в 0,0,0. Или нихьть?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 16.08.2010, 14:36
#9
mamuk


 
Регистрация: 06.05.2010
Сургут
Сообщений: 248


а по русски как это звучит? я в мейле все переводил, так то понял что длжны быть координаты, а всех тонкостей в переведенном бреде мне не понять. я конечно откровенно туплю, но все же "(25.0 5.0 0.0) разве не длина текста 25.00, 5.00 высота, 0. угол поворота ". пробовал с разной длинной текста,
а наверное это первое координаты нижнего левого угла всегда, (0,0,0) да? а 25 это тебе и длина и коодината по x относительно координат (0,0,0) и по y 5 и высота текста, и относительно тойже нижней левой точки рамки тектса?!
mamuk вне форума  
 
Непрочитано 16.08.2010, 14:36
#10
ытя


 
Регистрация: 23.09.2005
СПб
Сообщений: 428


Цитата:
Сообщение от ытя Посмотреть сообщение
координаты, относительно точки вставки
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Границы прямоугольника для текста, вставленного в 0,0,0
Результат один и тот же.
ытя вне форума  
 
Автор темы   Непрочитано 16.08.2010, 14:39
#11
mamuk


 
Регистрация: 06.05.2010
Сургут
Сообщений: 248


так где бы текст не вставлял, нижняя левая координата всегда будет (0,0,0) у рамки?
mamuk вне форума  
 
Непрочитано 16.08.2010, 14:43
#12
ытя


 
Регистрация: 23.09.2005
СПб
Сообщений: 428


unless the text object is oblique or vertical, or it contains letters with descenders (such as g and p). - За исключением случаев, когда текст наклонный, вертикальный или содержит символы типа "g" и "p".
ытя вне форума  
 
Автор темы   Непрочитано 16.08.2010, 14:56
#13
mamuk


 
Регистрация: 06.05.2010
Сургут
Сообщений: 248


Цитата:
Сообщение от mamuk Посмотреть сообщение
так где бы текст не вставлял, нижняя левая координата всегда будет (0,0,0) у рамки?
так это верно?
mamuk вне форума  
 
Непрочитано 16.08.2010, 15:01
#14
ытя


 
Регистрация: 23.09.2005
СПб
Сообщений: 428


Вот я взял текст "Прим." высотой 5, получилось - ((0.0 -1.66667 0.0) (16.9444 5.0 0.0))
ытя вне форума  
 
Автор темы   Непрочитано 16.08.2010, 15:07
#15
mamuk


 
Регистрация: 06.05.2010
Сургут
Сообщений: 248


но фактически если подвести курсор к тому месту где нижний угол рамки текста координаты явно не ((0.0 -1.66667 0.0).
mamuk вне форума  
 
Непрочитано 16.08.2010, 15:12
#16
CB

Конструирование в области нефтеразведки
 
Регистрация: 10.02.2006
Гомель
Сообщений: 321


Почувствуй разницу
Код:
[Выделить все]
(textbox '((1 . "12345") (40 . 5.0)))
(textbox '((1 . "12345") (40 . 10.0)))
Т.е. textbox вычисляет координаты текста "виртуально", используя только системные переменные TEXTSIZE и TEXTSTYLE.
Вычислить реальные координаты можно так
Код:
[Выделить все]
(setq obj (entget (car (entsel "\nВыберите текст: "))))

(mapcar '(lambda (x)
           (mapcar '+
                   (cdr (assoc 10 obj))
                   x
           ) ;_ end of mapcar
         ) ;_ end of lambda
        (textbox (list (assoc 1 obj) (assoc 40 obj)))
) ;_ end of mapcar
CB вне форума  
 
Непрочитано 16.08.2010, 15:21
#17
ытя


 
Регистрация: 23.09.2005
СПб
Сообщений: 428


Цитата:
Сообщение от mamuk Посмотреть сообщение
но фактически если подвести курсор к тому месту где нижний угол рамки текста координаты явно не ((0.0 -1.66667 0.0).
Я сразу сказал:"textbox возвращает координаты, относительно точки вставки текста."
ытя вне форума  
 
Автор темы   Непрочитано 16.08.2010, 15:23
#18
mamuk


 
Регистрация: 06.05.2010
Сургут
Сообщений: 248


(textbox '((1 . "12345"), а что означает еденица с точкой перед "12345" и выражение в скобках (40 . 5.0)? я теперь понял что вычисление происходит виртуально.
(40. 5.0) это задаются координаты верехней правой точки рамки?
mamuk вне форума  
 
Непрочитано 16.08.2010, 15:35
#19
CB

Конструирование в области нефтеразведки
 
Регистрация: 10.02.2006
Гомель
Сообщений: 321


1. Посмотри список (setq obj (entget (car (entsel "\nВыберите текст: "))))
Это DXF-код текстового примитива, расшифровка - в HELP'е.
(40. 5.0) - это высота текста
2.
Цитата:
Я сразу сказал:"textbox возвращает координаты, относительно точки вставки текста."
Да нет, не относительно точки вставки. Текст может иметь точку и center, и right, и left. Все это нужно учитывать при расчете координат. В данном примере - это left. Еще нужно учитывать растяжение/сжатие т.е. fit, угол наклона и т.д.

Последний раз редактировалось CB, 16.08.2010 в 17:52.
CB вне форума  
 
Непрочитано 16.08.2010, 15:51
#20
ытя


 
Регистрация: 23.09.2005
СПб
Сообщений: 428


Цитата:
Сообщение от CB Посмотреть сообщение
Текст может иметь точку и center, и right, и left. Все это нужно учитывать при расчете координат. В данном примере - это left. Еще нужно учитывать растяжение/сжатие т.е. fit...
Я с этим полностью согласен, просто пытался объяснить mamuk
Цитата:
Сообщение от mamuk Посмотреть сообщение
что это за координаты, когда графически там видны другие, я имею ввиду когда курсор подвожу к нижней рамки
ытя вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как получить координаты рамки text?

Реклама i


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
AUTOCAD 2010 перестал переключаться в многооконный режим. Проблемы с переменными Андрей Х. AutoCAD 24 27.05.2015 10:17
Express Tools Perezz!! AutoCAD 483 13.02.2015 10:57
перенос данных и автокада в эксель evg76 Программирование 31 29.10.2013 14:55
Копирование Мтекста с изменением №-ра копии Positron AutoCAD 4 17.08.2012 00:44
координаты вершин выбранной полилинии на VB? как получить ssv22 Программирование 5 17.07.2008 00:01