dwg.ru forum rss xml
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму |

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

Копирование содержания текста

Версия для печати
 
Закрытая тема
Опции темы Поиск в этой теме
Непрочитано 16.02.2008, 22:43 #1
Копирование содержания текста
МИНЗДРАВ
 
Oxypropane welder
 
Unix
Регистрация: 29.01.2008
Сообщений: 522

МИНЗДРАВ вне форума Вставить имя

Как получить возможность в Acade копировать содержание текста - одним кликом?
Например: на схеме расположения балок стоит множество текстов - "Б1", "Б2" и "Б3". А мне требуется, тыкнув идин раз на каждый из них, получить к примеру Б5.
Реально?
Просмотров: 6918
 
Непрочитано 16.02.2008, 23:58
#2
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,838


Если ты объяснишь как из Б1, Б2, Б3 - Б5 получается вопрос решить будет легче.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 17.02.2008, 00:05
#3
МИНЗДРАВ

Oxypropane welder
 
Регистрация: 29.01.2008
Unix
Сообщений: 522


Из них, получить - Б5.
Так понятней?
МИНЗДРАВ вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 17.02.2008, 00:24
#4
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,838


Нет
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 17.02.2008, 10:11
#5
kukuikar

Конструктор ЖБ
 
Регистрация: 15.05.2007
Москва
Сообщений: 26


Выдели все тексты руками и руками же через свойства...
kukuikar вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 18.02.2008, 09:47
#6
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,703
Отправить сообщение для VVA с помощью ICQ Отправить сообщение для VVA с помощью Skype™


Попробуй TTC - Text to Text Copy. Кстати, посмотри нумераторы, может понравятся.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 27.02.2008, 20:10
#7
dextron3

Фотограф
 
Регистрация: 01.01.2007
Алматы
Сообщений: 5,015


VVA,
Код:
[Выделить все]
(defun C:T_T ( / new_text ss ss1 e flag_sel_new flag_sel_old)
  (while (null flag_sel_new)
    (setvar "ERRNO" 0)
    (setq ss (car (nentsel "\nВыберите новый текст (ENTER-завершение): ")))
    (cond
      ;; Нажато ENTER — выход
      ((and (null ss) (= (getvar "ERRNO") 52)) (setq flag_sel_new T))
      ((null ss)
        (princ "\nНичего не выбрано! Повторите.")
        (vlr-beep-reaction)
      )
      (t
        (cond
         ;; Выбран текст — выходим из цикла
         ((setq new_text (cdr (assoc 1 (entget ss)))) (setq flag_sel_new T))
         (T
           (princ "\nВыбран не текст! Повторите.")
           (vlr-beep-reaction)
         )
        )
      )
    )
  ) ;; endof (while
  (if new_text (progn ;; А текст ли выбран?
    (princ (strcat "\nНовый текст: <" new_text ">"))
    (redraw ss 3)
    (while (null flag_sel_old)
      (setvar "ERRNO" 0)
      (setq ss1 (nentsel "\nВыберите старый текст (ENTER-завершение): "))
      (cond
        ((or (null ss1) (= (getvar "ERRNO") 7))
          (princ "\nНичего не выбрано! Повторите.")
          (vlr-beep-reaction)
        )
        (T
          (setq e (entget (car ss1)))
          (cond
           ((assoc 1 e)
             (entmod (subst (cons 1 new_text) (assoc 1 e) e))
             ;; Если это блок — нужно его обновить,
             ;; если не блок, то обновляем только сам примитив
             (cond
              ((cadddr ss1) (entupd (car (cadddr ss1))))
              (T  (entupd (car ss1)))
             )
             (setq flag_sel_old T)
           )
           (T
            (princ "\nВыбран не текст! Повторите.")
            (vlr-beep-reaction)
           )
          )
        )
      ) ;; (cond
    )
    (redraw ss 4)
  )) ;; (if (progn
  (princ)
)

VVA,
Что можно сделать чтобы выбиралось не по одному тексту а сразу рамочкой сколько хочешь

Пример лиспа:
1. Выберите базовый текст
2. Выберите область текстов для прописки базового текста
(или точечными выделениями с активной заменой)
3. Конец


Этот лисп как раз и послужит
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 28.02.2008, 18:56
#8
МИНЗДРАВ

Oxypropane welder
 
Регистрация: 29.01.2008
Unix
Сообщений: 522


Блин, ещё проблема.
Не знаете, как AutoCaD LT заставить все команды выполнять?
(лицензионный, мать его)
МИНЗДРАВ вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 28.02.2008, 19:55
1 | #9
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,703
Отправить сообщение для VVA с помощью ICQ Отправить сообщение для VVA с помощью Skype™


Модифицировал команду TTC из #6
Можно поштучно указывать здля замены Тексты, Размеры, Ячейки таблицы Автокада, Аттрибуты блока, или "промахнуться" и рамкой указать область для замены. Там будут искаться Тексты и Мтексты
Код:
[Выделить все]
;;;Text To Text copy
(defun c:ttc (/ actDoc vlaObj sObj sText curObj oldForm
        oType oldMode conFlag errFlag *error*)
  (vl-load-com)
      (setq actDoc(vla-get-ActiveDocument
        (vlax-get-acad-object)))
      (vla-StartUndoMark actDoc)
  (defun TTC_Paste(pasteStr / nslLst vlaObj hitPt
                   hitRes Row Column lst ss)
    (setq errFlag nil)
  (setvar "ERRNO" 0)
  (setq Lst(nentsel "\nPaste text or first point of corner <Enter-exit> >>"))
  (if (and (null Lst)
    (= (getvar "errno") 7)
    )
    (progn
    (setq hitPt (getcorner  (setq vlaObj (cadr(GRREAD nil 1))) "\nOther point: "))
    (setq ss (ssget "_C" vlaObj hitPt '((0 . "*TEXT"))))
    (setq Lst (mapcar '(lambda(x)(cons x '((0 0 0))))
   (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
     )
   )
    )
    (setq Lst (list Lst))
    )
(foreach nsllst Lst
    (if nsllst ;(setq nslLst(nentsel "\nPaste text >"))
      (progn
  (cond
    (
     (and
       (= 4(length nslLst))
       (= "DIMENSION"(cdr(assoc 0(entget(car(last nslLst))))))
       ); end and
     (setq vlaObj
      (vlax-ename->vla-object
        (cdr(assoc -1(entget(car(last nslLst)))))))
     (if
       (vl-catch-all-error-p
         (vl-catch-all-apply
     'vla-put-TextOverride(list vlaObj pasteStr)))
         (progn
         (princ "\n Can't paste. Object may be on locked layer. ")
         (setq errFlag T)
         ); end progn
       ); end if
     ); end condition #1
    (
     (and
       (= 4(length nslLst))
       (= "ACAD_TABLE"(cdr(assoc 0(entget(car(last nslLst))))))
       ); end and
     (setq vlaObj
      (vlax-ename->vla-object
        (cdr(assoc -1(entget(car(last nslLst))))))
     hitPt(vlax-3D-Point(trans(cadr nslLst)1 0))
     hitRes(vla-HitTest vlaObj hitPt
        (vlax-3D-Point '(0.0 0.0 1.0)) 'Row 'Column)
           ); end setq
     (if(= :vlax-true hitRes)
     (progn
         (if
     (vl-catch-all-error-p
       (vl-catch-all-apply
         'vla-SetText(list vlaObj Row Column pasteStr)))
     (progn
       (princ "\n Can't paste. Object may be on locked layer. ")
       (setq errFlag T)
       ); end progn
     ); end if
         ); end progn
       ); end if
     ); end condition # 2
    (
     (and
       (= 4(length nslLst))
       (= "INSERT"(cdr(assoc 0(entget(car(last nslLst))))))
       ); end and
     (princ "\nCan't paste to block's DText or MText. Select Attribute ")
     (setq errFlag T)
     ); end condition #3
    (
     (and
       (= 2(length nslLst))
         (member(cdr(assoc 0(entget(car nslLst))))
           '("TEXT" "MTEXT" "ATTRIB" "ATTDEF"))
       ); end and
     (setq vlaObj
      (vlax-ename->vla-object(car nslLst)))
        (if
     (vl-catch-all-error-p
       (vl-catch-all-apply
         'vla-put-TextString(list vlaObj pasteStr)))
    (progn
       (princ "\nError. Can't pase text. ")
      (setq errFlag T)
      ); end progn
     ); end if
     ); end condition #4
    (T
     (princ "\nCan't paste. Invalid object. ")
     (setq errFlag T)
     ); end condition #5
    ); end cond
             T
      ); end progn
            nil
           ); end if
  )
    ); end of TTC_Paste

    (defun TTC_MText_Clear(Mtext / Text Str)
    (setq Text "")
    (while(/= Mtext "")
      (cond
  ((wcmatch
     (strcase
       (setq Str
        (substr Mtext 1 2)))
                     "\\[\\{}`~]")
   (setq Mtext(substr Mtext 3)
         Text(strcat Text Str)
   ); end setq
  ); end condition #1
  ((wcmatch(substr Mtext 1 1) "[{}]")
    (setq Mtext
     (substr Mtext 2))
  ); end condition #2
  (
   (and
   (wcmatch
     (strcase
       (substr Mtext 1 2)) "\\P")
   (/=(substr Mtext 3 1) " ")
    ); end and
         (setq Mtext (substr Mtext 3)
               Text (strcat Text " ")
         ); end setq
   ); end condition #3
  ((wcmatch
     (strcase
       (substr Mtext 1 2)) "\\[LOP]")
    (setq Mtext(substr Mtext 3))
  ); end condition #4
  ((wcmatch
     (strcase
       (substr Mtext 1 2)) "\\[ACFHQTW]")
    (setq Mtext
     (substr Mtext
       (+ 2
          (vl-string-search ";" Mtext))))
  ); end condition #5
  ((wcmatch
     (strcase (substr Mtext 1 2)) "\\S")
    (setq Str(substr Mtext 3 (- (vl-string-search ";" Mtext) 2))
          Text(strcat Text (vl-string-translate "#^\\" " " Str))
          Mtext(substr Mtext (+ 4 (strlen Str)))
   ); end setq
   (print Str)
  ); end condition #6
  (T
   (setq Text(strcat Text(substr Mtext 1 1))
         Mtext (substr Mtext 2)
   )
  ); end condition #7
      ); end cond
    ); end while
  Text
); end of TTC_MText_Clear

  (defun TTC_Copy (/ sObj sText tType actDoc)
   (if
    (and
     (setq sObj(car(nentsel "\nCopy text... ")))
     (member(setq tType(cdr(assoc 0(entget sObj))))
      '("TEXT" "MTEXT" "ATTRIB" "ATTDEF"))
     ); end and
    (progn
      (setq actDoc(vla-get-ActiveDocument
        (vlax-get-Acad-object))
      sText(vla-get-TextString
       (vlax-ename->vla-object sObj))
      ); end setq
      (if(= tType "MTEXT")
  (setq sText(TTC_MText_Clear sText))
  ); end if
      ); end progn
    ); end if
    sText
    ); end of TTC_Copy
  (defun CCT_Str_Echo(paseStr / comStr)
    (if(< 20(strlen paseStr))
      (setq comStr
       (strcat
         (substr paseStr 1 17)"..."))
      (setq comStr paseStr)
      ); end if
    (princ
      (strcat "\nText = \"" comStr "\""))
    (princ)
    ); end of CCT_Str_Echo
    (defun *error*(msg)
    (vla-EndUndoMark
      (vla-get-ActiveDocument
        (vlax-get-acad-object)))
    (princ "\nQuit TTC")
    (princ)
    ); end of *error*
    (if(not ttc:Mode)(setq ttc:Mode "Multiple"))
    (initget "Multiple Pair-wise")
    (setq oldMode ttc:Mode
    ttc:Mode
     (getkword
       (strcat "\nSpecify mode [Multiple/Pair-wise] <" ttc:Mode ">: "))
    conFlag T
    paseStr ""
     ); end setq
    (if(null ttc:Mode)(setq ttc:Mode oldMode))
    (if(= ttc:Mode "Multiple")
      (progn
  (if(and(setq paseStr(TTC_Copy))conFlag)
    (progn
    (CCT_Str_Echo paseStr)
    (while(setq conFlag(TTC_Paste paseStr))T
      ); end while
    ); end progn
    ); end if
  ); end progn
      (progn
  (while
    (and conFlag paseStr)
    (setq paseStr(TTC_Copy))
    (if(and paseStr conFlag)
      (progn
    (CCT_Str_Echo paseStr)
    (setq errFlag T)
    (while errFlag
    (setq conFlag(TTC_Paste paseStr))
         );end while
       ); end progn
      ); end if
    ); end while
  ); end progn
      ); end if
   (vla-EndUndoMark actDoc)
   (princ "\nQuit TTC")
  (princ)
  ); end c:ttc
(princ "\n\t TTC - Text to Text copy. Copy text from DIMENSION, TEXT, MTEXT, ATTRIB, ATTDEF, ACAD_TABLE to one")
>МИНЗДРАВ
По ссылке в моей подписи прочитай примечание в начале статьи
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 28.02.2008, 21:55
#10
dextron3

Фотограф
 
Регистрация: 01.01.2007
Алматы
Сообщений: 5,015


VVA, от меня спасибо

Применение:
1. Исправление чертежей, к примеру Б1, на Б2 выборочно
2. Корректировка текстов из заготовок
3. Приведенный лис из поста #7 можно выбросить
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 03.03.2008, 13:57
#11
Hans667

сети
 
Регистрация: 12.04.2007
SPb
Сообщений: 534
Отправить сообщение для Hans667 с помощью AIM Отправить сообщение для Hans667 с помощью Skype™


а вот тема похожая подымалась.пост #15
__________________
Errare humanum est, insipientis perseverare
Hans667 вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 28.04.2008, 15:00
#12
skkkk

AutoCAD_2008->2011
 
Регистрация: 20.03.2008
Московская область
Сообщений: 2,198


VVA, можно ли сделать на функцию TTC кнопку с макросом, чтоб она сразу выбирала Multiple/Pair-wise? Спасибо
skkkk на форуме вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 28.04.2008, 15:46
#13
dextron3

Фотограф
 
Регистрация: 01.01.2007
Алматы
Сообщений: 5,015


(if (= ttc nil) ( Load (findfile "Lisp/ttc.lsp"))) ttc;m;

Lisp/ttc.lsp это путь в support где у тебя лежит лисп
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 28.04.2008, 18:19
#14
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,703
Отправить сообщение для VVA с помощью ICQ Отправить сообщение для VVA с помощью Skype™


>dextron3 Почти правильно. Проверка переменной TTC на nil не даст тебе информации, загружена или нет команда C:TTC. Проверка должна быть такой (if(null C:TTC) ... . Твоя конструкция (if (= ttc nil) ... просто будет каждый раз подгружать файл ttc.lsp. Ну и соответственно кнопочка, пути оставлены как у dextron3
^C^C(if(null C:TTC)(Load (findfile "Lisp/ttc.lsp")));ttc;m;
Вариант с расположением файла в папке, прописанной в путях доступа
^C^C(if(null C:TTC)(Load "ttc.lsp"));ttc;m;
Про пути доступа смотреть рисунок и читать из раздела "Организация библиотеки лисп файлов"
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 29.04.2008, 05:28
#15
dextron3

Фотограф
 
Регистрация: 01.01.2007
Алматы
Сообщений: 5,015


VVA, это только для этого лиспа или для всех?
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 29.04.2008, 09:57
#16
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,703
Отправить сообщение для VVA с помощью ICQ Отправить сообщение для VVA с помощью Skype™


Это для всех. Для лиспа (defun ttc ()<что-то делаем>) и (defun C:ttc ()<что-то делаем>) это две разные функции, которые можно вызвать из командной строки так (ttc) и так (C:TTC). Просто у функций, начинающихся с префикса C: есть некоторые особенности:
  • им нельзя передавать аргументы
  • вызвать функцию можно из командной строки, набрав ее имя без префикса C:, т.е. она становится командой Автокада
Разницу можешь увидеть, набрав в командной строке !ttc и !C:TTC при загруженном файле ttc.lsp.
Ну и к слову для остальных: здесь ( LISP. Копирование текста из/в DText, MText, Таблиц, Размеров, Атрибутов, определения Атрибутов) выложен вариант с возможностью переключения Layout при копировании текстов.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 04.06.2008, 03:40
#17
skkkk

AutoCAD_2008->2011
 
Регистрация: 20.03.2008
Московская область
Сообщений: 2,198


Помогите пожалуйста разобраться с постом #9. При копировании мтекста, который содержит степень (верхний индекс, например 2), вместо степени в конечный мтекст вставляется 2^. И хотелось бы в него добавить функцию замены цвета конечного мтекста, по аналогии с лиспом для вычисления суммы длин линий со вставкой в мтекст из http://dwg.ru/f/showthread.php?t=842...D%E8%FF&page=6, пост #118.

там изменен фрагмент
Код:
[Выделить все]
(if (vl-catch-all-error-p
      (vl-catch-all-apply
	'(lambda()
	   (vla-put-TextString vlaObj pasteStr)
	   (vla-put-Color vlaObj 3)  ;3-номер цвета
	   )
	)
      )
Нашел в #9 этот фрагмент, изменил согласно лиспу по ссылке, проверил скобки - не работает, вообще копировать перестает
Заранее спасибо
skkkk на форуме вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 10.06.2008, 01:39
#18
skkkk

AutoCAD_2008->2011
 
Регистрация: 20.03.2008
Московская область
Сообщений: 2,198


Накопал на этом сайте в программах лиспик по этой теме. Очень достойный, надо заметить.
Цитата:
Программа копирует содержание текста из/в dtext/mtext/dimensions. можно скопировать любой текст в любой размер. Из размера можно скопировать текст, если содержимое размерного текста изменено вручную.
Порядок работы: выбираете последовательно один или несколько текстовых примитивов или объектов содержащих текст (текст объединяется в одну строку разделенную пробелами), затем нажимаете enter или пробел и выбираете текст, в который нужно скопировать эту строку.
Обновление геометрии выноски при копировании текста в текст выноски.
.
Он тут: http://dwg.ru/dnl/198
Умеет копировать, корректно отображая индексы
skkkk на форуме вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 16.02.2012, 18:25
#19
crosandr

инженер-строитель
 
Регистрация: 09.07.2010
Санкт-Петербург
Сообщений: 1,736


Цитата:
Сообщение от VVA Посмотреть сообщение
Модифицировал команду TTC из #6
Можно поштучно указывать здля замены Тексты, Размеры, Ячейки таблицы Автокада, Аттрибуты блока, или "промахнуться" и рамкой указать область для замены. Там будут искаться Тексты и Мтексты
Немного расширил для объектов СПДС
А атрибуты динамических блоков возможно добавить будет?
Вложения
Тип файла: lsp ttc+spds6.lsp (24.8 Кб, 72 просмотров)
__________________
a computer program does not make a good engineer, only a good engineer should use a computer program
crosandr вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 08.06.2016, 16:28 VVA
#20
perpetule


 
Регистрация: 23.09.2008
Волгоград
Сообщений: 801
Отправить сообщение для perpetule с помощью ICQ Отправить сообщение для perpetule с помощью Skype™


Лисп из #9 перестал работать с ячейками таблицы, хелп ми плииз! Проект горит, пробовал различные варианты и с caduser в том числе, автокад 2014 лицензия SP1.

P.S.
Извиняюсь - все работает выбор не цифры в автокадовской таблице , а линии края ячейки, ранее насколько помню работало указанием цифры.
На всякий случай оставлю точно рабочий вариант.
Вложения
Тип файла: zip ttc-lsp-работает-с-таблицами-http-forums-autodesk-com.zip (4.0 Кб, 27 просмотров)
__________________
tc71

Последний раз редактировалось perpetule, 08.06.2016 в 17:04.
perpetule вне форума вставить имя Обратить внимание модератора на это сообщение  
Закрытая тема
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Копирование содержания текста

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

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

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Вставка в таблицу поля, соотвествующего площади примитива Profan Готовые программы 261 04.05.2018 12:45
Проблемы при копирование текста Robert625 AutoCAD 3 21.08.2007 16:21
Перемещение и копирование многосторочного текста Karen AutoCAD 13 23.12.2006 12:29
Изменение форматированного текста посредством lisp Tramp LISP 4 03.03.2006 11:28
Копирование текста в другие выбранные текстовые объекты Visla AutoCAD 1 27.04.2005 14:50

|| Главная || Каталог САПР || Тендеры || Публикации || Объявления || Биржа труда || Download || Галерея ||
|| Библиотека || Кунсткамера || Каталог предприятий || Контакты || Файлообменник || Блоги ||