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

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

арифметические действия между двумя текстовыми элементами

Ответ
Поиск в этой теме
Непрочитано 08.02.2007, 14:20
арифметические действия между двумя текстовыми элементами
RЯков
 
Регистрация: 04.05.2006
Сообщений: 37

Здравствуйте! Может кто из специалистов программирования подскажет, вообще, выполнима ли такая задача:?: : Щелкаю на иконку в автокаде, автокад у меня спрашивает: укажите числа, ( я щелкаю по нескольким цифрам т.е. по текстам с числами), автокад спрашивает, сложить, вычесть (или чего ни будь еще, типа логарифма ,но хотя бы сложить и вычесть), я выбираю сложить и энтер тогда за курсором появляется новый текст и я указываю точку куда его поставить
Просмотров: 16638
 
Непрочитано 09.05.2007, 00:51
#21
ASLYS

Delineante
 
Регистрация: 26.12.2006
Ростов-на-Дону/Madrid
Сообщений: 396
<phrase 1=


Есть такая проблема: на плане проставлены отметки, неожиданно они увеличиваются на 0,35м.
нужен lisp чтобы можно было ввести число, выделить тексты, кот. надо увеличить на это число
заранее спасибо
ASLYS вне форума  
 
Непрочитано 10.05.2007, 08:33
#22
Кулик Алексей aka kpblc
Moderator

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


А эти отметки - это что? Однострочные тексты, многострочные тексты, атрибуты, блоки с атрибутами? Что используется как разделитель целой и дробной части? Примерчик, плиз...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 10.05.2007, 09:18
#23
RЯков


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


НУ там ведь были такие лиспы... верхние посты, ссылки.
http://dwg.ru/forum/viewtopic.php?t=8291
RЯков вне форума  
 
Непрочитано 10.05.2007, 10:43
1 | #24
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,992


>ASLYS Пробуй
Код:
[Выделить все]
(defun C:DOTEXT ( / ent ss str do K lst)
;helper function. Unformat Mtext
(defun mip_MTEXT_Unformat ( 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)))
          ((wcmatch (substr Mtext 1 1) "[{}]")(setq Mtext (substr Mtext 2)))
          ((wcmatch (strcase (setq Str (substr Mtext 1 2))) "\\[LO`~]")
	   (setq Mtext (substr Mtext 3)))
          ((wcmatch (strcase (substr Mtext 1 2)) "\\[ACFHQTW]")
            (setq Mtext (substr Mtext (+ 2 (vl-string-search ";" Mtext)))))
          ((wcmatch (strcase (substr Mtext 1 2)) "\\P")
            (if (or(= " " (substr Text (strlen Text)))
		   (= " " (substr Mtext 3 1)))
               (setq Mtext (substr Mtext 3))
               (setq Mtext (substr Mtext 3) Text (strcat Text " "))))
	  ((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)))))
	  (t (setq Text (strcat Text (substr Mtext 1 1)) Mtext (substr Mtext 2)))
	  ))
  Text
  )
;helper function
(defun str-str-lst (str pat / i)
  (cond ((= str "") nil)
        ((setq i (vl-string-search pat str))
         (cons (substr str 1 i)
               (str-str-lst (substr str (+ (strlen pat) 1 i)) pat)
         ) ;_  cons
        )
        (t (list str))
  ) ;_  cond
) ;_  defun

;;Действие с объектом
;;ent - vla or ename object of text
;;do - действие
;;K - коэффициент действия (do <значение текста> K)
;;
(defun dotext ( ent do K  / str res)
  (if (= (type ent) 'ENAME)(setq ent (vlax-ename->vla-object ent)))
  (if (not (numberp K))(if (or (equal do /)(equal do *))(setq K 1)(setq K 0)))
  (if (and (equal do /)(zerop K))(setq K 1))
    (setq str (str-str-lst (vla-get-textstring ent) "\\P")
          str (mapcar '(lambda(x)(mip_mtext_unformat x)) str)
      str (mapcar '(lambda(x)(vl-string-translate "," "." (vl-string-trim  "%UuoOcC \t"   x))) str)
      res (mapcar 'atof str)
      res (mapcar '(lambda(nu)(do nu K)) res)
      res (apply 'strcat
           (mapcar '(lambda(x)(strcat (rtos x 2 2) "\\P")) res))
    res (vl-string-right-trim "\\P" res)
          );_setq
    (vla-put-textstring ent res)
  )
(vl-load-com)  
(while (not(member (setq str (substr (getstring "\nУкажите действие (+ - * /): ") 1 1)) '("+" "*" "-" "/")))
  (princ " * неверно*  Нужно набрать + - * / "))
(cond ((= str "*")(setq do *)(initget 1))
      ((= str "+")(setq do +)(initget 1))
      ((= str "-")(setq do -)(initget 1))
      ((= str "/")(setq do /)(initget 3))
      (t (setq do nil)))
(setq K (getreal "\nУкажите коэффициент: "))  
(princ "\nВыберите текст < выход >")
(if (and do (setq ss (ssget '((0 . "*TEXT")))))
  (progn
    (setq lst (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))))
    (foreach obj lst
      (if (vlax-write-enabled-p obj)
        (vl-catch-all-apply 'dotext (list obj do K))
        (princ "\nТекст на замороженном слое")
        )
      )
    )
  )
  (princ)
  )
(princ "\nНаберите DOTEXT в командной строке")
VVA вне форума  
 
Непрочитано 10.05.2007, 12:41
#25
ASLYS

Delineante
 
Регистрация: 26.12.2006
Ростов-на-Дону/Madrid
Сообщений: 396
<phrase 1=


Цитата:
А эти отметки - это что?
Чертежи (выполненные другой фирмой) придут на следующей недели, сам еще не видел, знаю что на планах нужно поменять отметки коммуникаций, скорее всего тексты или Мтексты.
VVA, спасибо, отлично работает
ASLYS вне форума  
 
Непрочитано 10.05.2007, 19:37
#26
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,992


А вот еще нашел в тему
kitox mathtools - набор команд для математических действий с текстовыми объектами
VVA вне форума  
 
Непрочитано 04.09.2009, 14:46
#27
kshatriy


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


Цитата:
Сообщение от Олег К. Посмотреть сообщение
Рискну-ка я выложить свой вариант решения этой задачи. Это одна из первых моих серьезных программ (изучаю ЛИСП не так уж давно), но работать должен в AutoCADe от 2000 до 2007. Если гуру ЛИСПа найдут время посмотреть код и прокомментировать (ну да, побить за непрофессионализм), буду рад.
Нужно загрузить прогу в КАД, запуск командой TextCalc.
[ATTACH]1171006212.rar[/ATTACH]

Забыл сказать, что выполняются только простые действия: +, -, * и /. Для вывода результата в текстовый объект необходимо наличае уже готового текста. Можно изменить существующий текст, либо создать новый (в этом случае прога просит указать текст-образец).
спасибо за лисп!
добавьте пожалуйста,(если есть возможность) обработку текстов из размеров и значений атрибутов блока.
kshatriy вне форума  
 
Непрочитано 07.09.2016, 13:17 арифметические действия с полями
#28
moonalien23


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


а с такой проблемой никто не сталкивался?

имеется блок с полем (собственно с атрибутом), поле отображает значение положения начальной точки одной из линий в этом блоке, т.е. если блок перетаскивать по чертежу (в моем случае в вертикальном направлении), то значение поля соответственно будет меняться. Но значение это выводится исключительно относительно мировой системы координат (МСК) и выдает значения соответствующие. Первое меня совершенно не смущает, это как раз радует, что при смене системы координат, ничего не собьется. А вот со вторым беда. Например, если начальная точка линии расположена на координате Y=10, то поле соответственно отобразит значение "10", а мне нужно в 10 раз меньше (23 должно превратиться в 2.3, 158 - в 15.8, 253,36 - в 25,336 и т.д.), т.е. значение поля необходимо поделить на 10 - как это сделать?
Как я понимаю, необходимо в код поля ввести дополнительные символы для обозначения деления - какие именно символы, и, самое главное, как их вставить в этот код?

Заранее прошу прощения, если это нубство
moonalien23 вне форума  
 
Непрочитано 08.09.2016, 07:31
#29
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,589


Цитата:
Сообщение от moonalien23 Посмотреть сообщение
Как я понимаю, необходимо в код поля ввести дополнительные символы для обозначения деления - какие именно символы, и, самое главное, как их вставить в этот код?
Boxa вне форума  
 
Непрочитано 08.09.2016, 08:00
#30
moonalien23


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


для Воха

в вашем случае поле берет значение из формулы, которую, как я понял, вы задаете целиком самостоятельно, т.е. значение 123.45 вы ввели самостоятельно, верно? оно не взято само собой из положения какого то объекта на листе

а вот мой случай, я беру значение стартовой точки линии для вывода в поле. вот это значение и необходимо поделить на 10, т.е. конкретно в данном случае значение в Preview должно быть 10.861, а не 108.61. К сожалению Conversation factor в этом случае почему то неактивен

Нажмите на изображение для увеличения
Название: 11.jpg
Просмотров: 45
Размер:	168.7 Кб
ID:	175833
moonalien23 вне форума  
 
Непрочитано 08.09.2016, 08:39
#31
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,589


Цитата:
Сообщение от moonalien23 Посмотреть сообщение
в вашем случае поле берет значение из формулы, которую, как я понял, вы задаете целиком самостоятельно, т.е. значение 123.45 вы ввели самостоятельно, верно? оно не взято само собой из положения какого то объекта на листе
А если посмотреть внимательно, то на заднем фоне видно Mtext содержащий значение 123.45, на которое ссылается поле в формуле, значение которого подкрашено серым и в формуле не просто так использовано умножение на 1, а для перевода из строкового значение в числовое, которое можно преобразовывать, а вот уже числовому значению устанавливается соответствующий коэффициент. Все это точно так же работает и для стартовой точки линии.

Я полагал, что все и так видно на картинке и дополнительного пояснения не потребуется, однако...
Boxa вне форума  
 
Непрочитано 09.09.2016, 11:13
#32
moonalien23


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


для Воха

писал ранее, что, возможно, это нубство ))

спасибо за объяснение, разобрался - научился новому для себя
moonalien23 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > арифметические действия между двумя текстовыми элементами

Размещение рекламы