Редактирование коэффициента сжатия - Страница 2
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Редактирование коэффициента сжатия

Редактирование коэффициента сжатия

Ответ
Поиск в этой теме
Непрочитано 22.07.2008, 11:07
Редактирование коэффициента сжатия
Shoorup
 
Минск
Регистрация: 16.09.2006
Сообщений: 1,587

Задача такая:
Есть куча чертежей (как обычно ) в которых куча однострочных текстов содержащих от 6 до 12 символов. Выравнивание у них всегда либо "влево" либо "вправо". Коэффициент сжатия всегда при изменениях варьируется. Но стандартно он не превышает 0.8 В зависимости от того как расположена близ лежащая линия изменяется коэффициент сжатия (вручную - что утомительно методом подбора). Изменяется он ступенчато до двух знаков после запятой. (0.8; 0.79; 0.78 ... 0.45)
Необходимо написать програмку которая будет это делать автоматически.
Т.е. например у меня есть горизонтальная линия справа от нее написан текст который либо слишком сжат либо переваливает через линию. Выбираем линию и потом тексты. При выборе очередного текста он автоматом изменяет коэффициент сжатия на необходимый.

Вложения
Тип файла: dwg
DWG 2004
коэффициент сжатия.dwg (39.2 Кб, 1886 просмотров)

__________________
Поезд который устал от ржавого здравомыслия рельсов...
Просмотров: 7159
 
Автор темы   Непрочитано 28.07.2008, 22:52
#21
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Donhuan, спасибо. Буду штудировать.
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 28.07.2008, 23:51
#22
Кулик Алексей aka kpblc
Moderator

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


Учиться мне сейчас что-то лениво, поэтому один из вариантов кода:
Код:
[Выделить все]
(defun test (adds              /                 fun_get-length-by-angle
             text              plines            adoc
             *error*           _dwgru-conv-pickset-to-list
             min_dist          text_box          err
             )

            ;|
*    adds -> "ширина" дополнительных пропусков спереди и сзади текста.
*    Проверок минимум
*    Пример вызова:
(test 0.)
(test 1.5)
*    Точка вставки и выравнивание текста не меняется и не анализируется.
|;

  (defun _dwgru-conv-pickset-to-list (value / tab item)
    (repeat (setq tab  nil
                  item (sslength value)
                  ) ;_ end setq
      (setq tab (cons (ssname value (setq item (1- item))) tab))
      ) ;_ end repeat
    ) ;_ end defun

  (defun *error* (msg)
    (vla-endundomark adoc)
    (princ msg)
    (princ)
    ) ;_ end of defun

  (defun fun_get-length-by-angle (ent ang / coord res counter)
    (setq ent     (entget ent)
          coord   (mapcar 'cdr
                          (vl-remove-if-not '(lambda (x) (= (car x) 10)) ent)
                          ) ;_ end of mapcar
          ang     (cos ang)
          counter 0
          ) ;_ end of setq
    (if (= (logand (cdr (assoc 70 ent)) 1) 1)
      (setq coord (append coord (list (car coord))))
      ) ;_ end of if
    (repeat (1- (length coord))
      (if (or (equal (cos (angle (nth counter coord) (nth (1+ counter) coord)))
                     ang
                     1e-6
                     ) ;_ end of equal
              (equal (cos (angle (nth (1+ counter) coord) (nth counter coord)))
                     ang
                     1e-6
                     ) ;_ end of equal
              ) ;_ end of or
        (setq
          res
           (cons (distance (nth counter coord) (nth (1+ counter) coord)) res)
          ) ;_ end of setq
        ) ;_ end of if
      (setq counter (1+ counter))
      ) ;_ end of repeat
    (reverse res)
    ) ;_ end of defun

  (vl-load-com)
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-StartUndoMark
  (if (and (setq text ((lambda ()
                         (prompt "\nВыбирай тексты : ")
                         (ssget "_:L" '((0 . "*TEXT")))
                         ) ;_ end of lambda
                       )
                 ) ;_ end of setq
           (setq plines
                  (cond
                    (((lambda ()
                        (prompt "\nВыбери как минимум одну полилинию : ")
                        (ssget '((0 . "LWPOLYLINE")))
                        ) ;_ end of lambda
                      )
                     )
                    (t
                     (getdist
                       (strcat
                         "\nУкажи расстояние, в которое надо вписывать, включая отступ в "
                         (rtos adds)
                         " ед. : "
                         ) ;_ end of strcat
                       ) ;_ end of getdist
                     )
                    ) ;_ end of cond
                 ) ;_ end of setq
           ) ;_ end of and
    (progn
      (setq min_dist
             (cond
               ((= (type plines) 'pickset)
                (- (apply 'min
                          (apply 'append
                                 (mapcar '(lambda (x) (fun_get-length-by-angle x 0.))
                                         (_dwgru-conv-pickset-to-list plines)
                                         ) ;_ end of mapcar
                                 ) ;_ end of apply
                          ) ;_ end of apply
                   adds
                   ) ;_ end of -
                )
               (t (- plines adds))
               ) ;_ end of cond
            ) ;_ end of setq
      (foreach item (_dwgru-conv-pickset-to-list text)
        (if (vl-catch-all-error-p
              (setq err
                     (vl-catch-all-apply
                       (function
                         (lambda (/ real_dist)
                           (vla-put-scalefactor (vlax-ename->vla-object item) 1.)
                           (if
                             (>= (setq
                                   real_dist
                                    (abs (apply
                                           '-
                                           (mapcar 'car (textbox (entget item)))
                                           ) ;_ end of apply
                                         ) ;_ end of abs
                                   ) ;_ end of setq
                                 min_dist
                                 ) ;_ end of >=
                              (vla-put-scalefactor
                                (vlax-ename->vla-object item)
                                (/ min_dist real_dist)
                                ) ;_ end of vla-put-scalefactor
                              ) ;_ end of if
                           ) ;_ end of lambda
                         ) ;_ end of function
                       ) ;_ end of vl-catch-all-apply
                    ) ;_ end of setq
              ) ;_ end of vl-catch-all-error-p
          (princ (strcat "\n** error ** : " (vl-catch-all-error-message err)))
          ) ;_ end of if
        ) ;_ end of foreach
      ) ;_ end of progn
    ) ;_ end of if
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
Вложения
Тип файла: lsp test.lsp (5.4 Кб, 71 просмотров)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.

Последний раз редактировалось Кулик Алексей aka kpblc, 29.07.2008 в 00:40. Причина: Добавил lsp-файл
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 29.07.2008, 09:24
#23
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Кулик Алексей aka kpblc, чтото не очень понятно что эта прога делает Чтото похожее есть но сжимает текст ну очень сильно.
С вызовом очень не понятно.
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 29.07.2008, 09:39
#24
Кулик Алексей aka kpblc
Moderator

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


Я гонял на твоем файле. Видео, как я вызывал - в аттаче
Вложения
Тип файла: zip text_compress.zip (472.4 Кб, 90 просмотров)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 29.07.2008, 11:03
#25
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Получилось! Супер! Спасбо Алексей огромное.
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Автор темы   Непрочитано 29.07.2008, 11:09
#26
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Алексей, если не сложно добавь еще чтобы можно было текст ровнять не только по полилинии, но и по просто линии.
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 29.07.2008, 11:16
#27
Кулик Алексей aka kpblc
Moderator

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


В коде найди строку
Код:
[Выделить все]
(ssget '((0 . "LWPOLYLINE")))
и замени на
Код:
[Выделить все]
(ssget '((0 . "LINE,LWPOLYLINE")))
У меня сейчас просто шансов нуль исправить по полной. По идее работать должно
P.S. Кстати, если не укажешь никакой примитив, то можно будет просто указывать расстояние Попробуй, может, такой вариант окажется более удобным?
P.P.S. Если указывать несколько примитивов, то будет выбираться минимальная длина горизонтального участка.
---
Добавлено: только что "дошло". Работать не будет предложенное исправление. Придется погодить
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 30.07.2008, 01:21
#28
Кулик Алексей aka kpblc
Moderator

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


Как вариант - см.аттач.
Вложения
Тип файла: lsp compress-text.LSP (4.5 Кб, 90 просмотров)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 30.07.2008, 11:03
#29
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


(compress-text 0.)
(compress-text 1.5)
Не могу догнать как работает это? Что означает сие цыфры? Да и вообще принцип работы программы не очень понимаю. Алексей если не сложно объясни.
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 30.07.2008, 11:35
#30
Кулик Алексей aka kpblc
Moderator

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


Ну а что там объяснять? Если, например, текст вписывается в прямоугольник с координатами по оси Х 10 - 50 (то есть "длина" текста 40), а отрезок имеет длину по той же оси 16, то тексту назначается коэффициент сжатия (при compress-text 1.5):
Там просто аналитики многовато (возможно, лишней)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 09.08.2013, 15:25 редактирование коэффициента сжатия многострочного атрибута
#31
allar8


 
Регистрация: 12.03.2013
Сообщений: 611


У меня АСАД 2010. Есть блоки с многострочными атрибутами. Для них почему то не активно редактирование коэффициента растяжения
(редактор атрибутов блоков -> Параметры текста -> Степень растяжения - Не активна). Можно как нибудь решить эту проблему?
allar8 вне форума  
 
Непрочитано 09.08.2013, 15:26
#32
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Может быть это от шрифта зависит? С этим шрифтом обычный мультитекст сжимается?
Do$ вне форума  
 
Непрочитано 10.08.2013, 13:19
#33
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Цитата:
Сообщение от allar8 Посмотреть сообщение
У меня АСАД 2010. Есть блоки с многострочными атрибутами. Для них почему то не активно редактирование коэффициента растяжения
(редактор атрибутов блоков -> Параметры текста -> Степень растяжения - Не активна). Можно как нибудь решить эту проблему?
Попробуй так
Код:
[Выделить все]
(defun C:demo(/ attObj en scl)
  (vl-load-com)
(if
(and(setq en (nentsel "\nSelect Attribute: "))
    (setq scl (getreal "\nScale Factor: ")))
(progn
(setq attObj (vlax-ename->vla-object(car en)))
(if ;|check if selected is multiline attribute|;
  (eq :vlax-true (vla-get-mtextattribute attObj))
  (progn
  (vla-put-mtextboundarywidth attObj scl)
  (vla-put-scalefactor attObj scl)
  
;;;possible values are: 
;;;acLeftToRight - 1 	
;;;acRightToLeft - 2 	
;;;acTopToBottom - 3	
;;;acBottomToTop - 4 	
;;;acByStyle - 5	
  
  (vla-put-mtextdrawingdirection attObj
    (vla-get-mtextdrawingdirection attObj));<-- would not work in ObjectDBX application  ! 
  (vla-updatemtextattribute attobj))
  (progn ;|single text attribute|;
    (vla-put-scalefactor attObj scl)
    (vla-update attobj)
    )
  )
)
)(princ))
Олег (jr.) вне форума  
 
Непрочитано 15.08.2013, 12:39
#34
Эдуард

строительство
 
Регистрация: 16.01.2004
Петербург
Сообщений: 165
<phrase 1=


Вы пытаетесь заново написать команду Textfit ?
Эдуард вне форума  
 
Непрочитано 15.08.2013, 14:42
#35
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Цитата:
Сообщение от Эдуард Посмотреть сообщение
Вы пытаетесь заново написать команду Textfit ?
Ба, кого я вижу, ES, большой привет!
Это мне ?
Олег (jr.) вне форума  
 
Непрочитано 15.08.2013, 15:18
#36
Эдуард

строительство
 
Регистрация: 16.01.2004
Петербург
Сообщений: 165
<phrase 1=


Привет. Я написал всем участникам темы. Автору нужно (имхо) уйти от подбора вручную коэффициента сжатия текста , что успешно и выполняет команда Textfit.
Эдуард вне форума  
 
Непрочитано 15.08.2013, 18:18
#37
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


@Эдуард,
Рад что ты снова в строю,
Удачи и успехов,
Many regards
Олег (jr.) вне форума  
 
Непрочитано 12.09.2013, 11:29
#38
allar8


 
Регистрация: 12.03.2013
Сообщений: 611


Цитата:
Сообщение от allar8 Посмотреть сообщение
У меня АСАД 2010. Есть блоки с многострочными атрибутами. Для них почему то не активно редактирование коэффициента растяжения
(редактор атрибутов блоков -> Параметры текста -> Степень растяжения - Не активна). Можно как нибудь решить эту проблему?
Я нашел ответ. Системная переменная ATTIPE
allar8 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Редактирование коэффициента сжатия



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Редактирование однострочного текста на чертеже Nick Fur AutoCAD 12 10.03.2012 08:10
Редактирование размеров Piton AutoCAD 12 10.02.2010 23:06
при выборе команды редактирование текста вырубается Acad Nikolays AutoCAD 4 24.10.2007 09:14
Редактирование атрибутов/внешней ссылки. Alan AutoCAD 2 09.03.2006 17:09