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

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

Вставка и удаление пробелов в надписях и блоках

Ответ
Поиск в этой теме
Непрочитано 03.06.2011, 12:16 #1
Вставка и удаление пробелов в надписях и блоках
Janna_R
 
Регистрация: 03.06.2011
Сообщений: 12

Всем здравствуйте!

Для целей картографии, нуждаюсь в лиспе или макросе который может вставлять и удалять пробелы между буквами в текстах и блоках. Как я это вижу, нажав на кнопку - вставились пробелы, нажав еще раз -вставились дополнительные пробелы. А при нажатии другой, пробелы удаляются.... Причем, хотелось бы, чтобы пробелы между словами оставались ):
Если кто-нибудь сможет мне помочь, благодарность моя не будет иметь границ ( но в разумный пределах(: ) И еще, все это нужно для 2002 автокада ): (работодатели жуткие скупердяи)

Зараннее спасибо!

Жанна Р.
Просмотров: 5131
 
Непрочитано 03.06.2011, 12:22
#2
Лиспер


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


Может, будет проще менять коэффициент ширины для текстового стиля?
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Непрочитано 03.06.2011, 12:46
#3
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


Janna_R, к тому что Вам предложил Лиспер + еще несколько уточняющих вопросов:
1. Атрибуты блоков, тоже имеют свойство отображать текстовые надписи, для них тоже нужно применять алгоритм;
2. Изменения надписей должно происходить на всем чертеже или все таки должна быть возможность задания области применения;
3. А как быть с надписами на отключенных слоях.
__________________
cadtools
TararykovDG вне форума  
 
Автор темы   Непрочитано 03.06.2011, 14:30
#4
Janna_R


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


Еще раз здравствуйте!
1 Менять ширину букв не подходит. Посмотрите, допустим на карту России, и Вы увидете, что надпись Р О С С И Я растянута по всей териитории именно пробелами. Если сделать широкие буквы, то они будут шириной с несколько областей или краев, и прочитать такую надпись будет невозможно.
2 4 TararykovDG Это нужно в основном для блоков, внутри блока есть только один текстовый атрибут, как это происходит, допустим есть кирпичная стена или деревянный забор, у меня установлена апликация к автокаду для картографического черчения, в ней я ввожу номер блока ( для кирпичной стены допустим КС, выбираю линию и блок поворачиваетя относитель линии и появляется в том месте гдя я выбрала анотация -кирпичная стена- . Так вот, стена бывает короче или длинее, и возникает задача растянуть надпись, я вхожу внутрь блока в вручную нажимаю пробел стрелку вправо,пробел стрелку вправо,пробел стрелку вправо.... Скучно и тупо, хотелось бы автоматизировать этот процесс. Автоматически редактировать весь чертеж не нужно, только индивидуально один блок, как я это вижу, ввел команду, выбрал блок, программа вставила по пробелу между буквами. Например было: КИРПИЧНАЯ СТЕНА, после выполнения команды К И Р П И Ч Н А Я С Т Е Н А, если еще раз выбрать этот же блок будет так К И Р П И Ч Н А Я С Т Е Н А и так далее, а и обратная команда убирает пробелы, например было К И Р П И Ч Н А Я С Т Е Н А, после нажатия К И Р П И Ч Н А Я С Т Е Н А, еще нажатие будет КИРПИЧНАЯ СТЕНА итд... Разумеется пробел между КИРПИЧНАЯ и СТЕНА должен оставаться. А то что в замороженых слоях, редактирование должно проходить индивадуально, только блок который я выбираю.

С П А С И Б О !
Janna_R вне форума  
 
Непрочитано 03.06.2011, 16:00
#5
Do$

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


Не знаю, пойдет ли в 2002 каде... Пробуйте.
Добавление пробелов - команда textspaceadd, удаление - textspacedel.
Вложения
Тип файла: lsp textspace.LSP (3.9 Кб, 81 просмотров)
Do$ вне форума  
 
Непрочитано 03.06.2011, 16:53
#6
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


Janna_R, + к тому что предложил Do$, вот еще такой вариант. Запускаете команду text_space+- выбираете объекты (один или несколько) и жмете +/- для добавления/удаления пробелов
Код:
[Выделить все]
 
; Вызов:  text_space+-
(defun c:text_space+-()
  ((lambda(nbr)
     (if (and nbr
              (not (vl-catch-all-error-p nbr))
              )
       (progn
         (prompt "\n Для добавления/удаления пробелов нажмите +/- , для завершения Enter: ")
         (while (/= (cadr (setq gr (grread))) 13)
           (foreach item (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex nbr))))
             (cond ((or (= (vla-get-ObjectName item) "AcDbText") (= (vla-get-ObjectName item) "AcDbMText"))
                    (cond ((= (cadr gr) 43) (vla-put-TextString item (add_symbol (vla-get-TextString item) " ")))
                          ((= (cadr gr) 45) (vla-put-TextString item (del_symbol (vla-get-TextString item) " ")))
                          )
                    )
                   ((= (vla-get-ObjectName item) "AcDbBlockReference")
                    (if (> (vlax-safearray-get-u-bound (vlax-variant-value (vla-GetAttributes item)) 1) -1)
                      (foreach atr (vlax-safearray->list (vlax-variant-value (vla-GetAttributes item)))
                        (cond ((= (cadr gr) 43) (vla-put-TextString atr (add_symbol (vla-get-TextString atr) " ")))
                              ((= (cadr gr) 45) (vla-put-TextString atr (del_symbol (vla-get-TextString atr) " ")))
                              )
                        )
                      )
                    )
                   )
             )
           )
         )
       )
     )
    (vl-catch-all-apply 'ssget
                        (list (list (cons 0 "TEXT,MTEXT,INSERT")))
                        )
    )
  ); end c:text_space+-


(defun add_symbol(str symb / lst)
  (vl-list->string (foreach item (vl-string->list str) (setq lst (append lst (list item (ascii symb))))))
  ); end add_space

(defun del_symbol(str symb / lst fl)
  (if (vl-every '(lambda(x)
                   (setq fl (not fl))
                   (if (not fl)
                     (= x (ascii symb))
                     T
                     )
                   )
                (vl-string->list str)
                )
    (foreach item (vl-string->list str)
      (if (not fl)
        (setq lst (append lst (list item)))
        )
      (setq fl (not fl))
      )
    (setq lst (vl-string->list str))
    )
  (vl-list->string lst)
  ); end del_symbol
__________________
cadtools
TararykovDG вне форума  
 
Автор темы   Непрочитано 03.06.2011, 17:31
#7
Janna_R


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


Огромное спасибо Do$, это классно! Работает отлично. Но я нашла несколько проблем, команда textspacedel не работает. Причем странно, когда я перый опыт делала в тексте пробелы удалялись, а через несколько минут и в тексте перестали удалятся пробелы. Никаких сообщений о ошибках не выдается. Еще я заметила такую вещь, если растянутый блок взорвать с переводом атрибута в текст, Автокад вылетает с сообшением INTERNAL ERROR: !U:\global\src\coreacad\CORESRC\scandr.cpp@2274: eLockViolation.
Но это мелочи, в 99% случаев текст приходится растягивать.
Я за тебя дорогой Do$ свечку в Храме поставлю!

Жанна

4 TararykovDG Ага сейчас попробую...
Janna_R вне форума  
 
Непрочитано 05.06.2011, 18:58
#8
Do$

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


Цитата:
Сообщение от Janna_R Посмотреть сообщение
перестали удалятся пробелы
Цитата:
Сообщение от Janna_R Посмотреть сообщение
Автокад вылетает с сообшением
Исправил, доработал, пробуйте. Заодно изменил имена команд, чтоб с клавиатуры быстрее было набирать. Теперь для добавления пробелов в командной строке нужно набрать TSA, для удаления - TSD.
Вложения
Тип файла: lsp textspace.LSP (3.3 Кб, 111 просмотров)
Do$ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Вставка и удаление пробелов в надписях и блоках

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
результат работ команд purge и audit lex0101 Программирование 23 13.02.2012 08:34
AutoCAD 2011 при копировании не вставляет в другой чертеж Maxxwell AutoCAD 7 07.05.2010 14:44