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

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

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

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

Здравствуйте! Может кто из специалистов программирования подскажет, вообще, выполнима ли такая задача:?: : Щелкаю на иконку в автокаде, автокад у меня спрашивает: укажите числа, ( я щелкаю по нескольким цифрам т.е. по текстам с числами), автокад спрашивает, сложить, вычесть (или чего ни будь еще, типа логарифма ,но хотя бы сложить и вычесть), я выбираю сложить и энтер тогда за курсором появляется новый текст и я указываю точку куда его поставить
Просмотров: 18022
 
Непрочитано 08.02.2007, 14:53
#2
den001

Инженер по автоматизации (строительство)
 
Регистрация: 05.05.2006
Люберцы
Сообщений: 241


Задача, ессно, выполнима, но ее нужно выполнять
P.S. Сумматор есть готовый, на VBA, нужен?
den001 вне форума  
 
Непрочитано 08.02.2007, 19:21
#3
Тим

инженер
 
Регистрация: 27.04.2006
Ростов-на-Дону
Сообщений: 33


http://dwg.ru/forum/viewtopic.php?t=8291
Посмотри здесь, много чего интересного
[/url]
Тим вне форума  
 
Автор темы   Непрочитано 09.02.2007, 06:47
#4
RЯков


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


За ссылочку спасибо буду разбираться...
VBA наверное надо... ммм давно искал повод спросить, что это и как его загружать
Еще раз спасибо!
RЯков вне форума  
 
Автор темы   Непрочитано 09.02.2007, 08:17
#5
RЯков


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


По поводу ссылки: Все что там выложенно не совсем подходит...
Мне бы вот отнимать из одного текста другой получать новый текст .
Коллеги посмотрели на то как легко можно два текста прибавлять и выдвиннули свои условия ...[sm3302]
т.е чтоб за одну команду можно было сделать несколько действий : расстояние умножить на уклон отнять предыдущую отметку .... :?:
Напоминю, что все результаты этого вычисления должны на листе отображаться как текст и далее участвовать в следующих действиях...
Еще раз спасибо !
RЯков вне форума  
 
Автор темы   Непрочитано 09.02.2007, 08:30
#6
RЯков


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


Да вот еще! Клево было бы еслиб арифметическое действие вводилось с клавиатуры
RЯков вне форума  
 
Непрочитано 09.02.2007, 09:00
#7
Pastor

это только кличка
 
Регистрация: 22.10.2006
Москва
Сообщений: 252


Дело за малым.
Надо написать членораздельное ТЗ, максимально подробное, с примерами того, что складывается или вычитается и что получается в результате. Описать то, какие вопосы хотелось бы получать от AutoCAD и в какой форме удобнее было бы на них отвечать и т.д. и т.п.
Тогда может кто и поможет...
Pastor вне форума  
 
Непрочитано 09.02.2007, 09:02
#8
Кулик Алексей aka kpblc
Moderator

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


> Pastor: Отлично! Полностью поддерживаю!
P.S. Сейчас выяснится, что стандартного калькулятора хватит за глаза
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 09.02.2007, 09:07
#9
den001

Инженер по автоматизации (строительство)
 
Регистрация: 05.05.2006
Люберцы
Сообщений: 241


RЯков
Извольте

Про внедрение было здесь (в том числе), заодно может и сами предлагаемые вещи пригодятся
http://dwg.ru/dnl/1929 (в комментариях)
http://dwg.ru/dnl/1931

А еще, в последнее время, мне понравилось запускать макросы через Lisp-команды. Тем более, что с подводными камнями, вроде, разобрались. Об этом здесь: http://dwg.ru/forum/viewtopic.php?t=11677, совсем свеженькая тема. Ежели чего не так - пишите, всегда рад помочь.
[ATTACH]1171001265.rar[/ATTACH]
__________________
Number
TextDuplicate
FieldToText
den001 вне форума  
 
Непрочитано 09.02.2007, 09:11
#10
den001

Инженер по автоматизации (строительство)
 
Регистрация: 05.05.2006
Люберцы
Сообщений: 241


Крыс
Да нет, вещь-то, в обчем, предлагается нужная, только вот писать некогда. Да и мне она не особо нужна (поэтому, собственно, у меня этого и нет )
den001 вне форума  
 
Автор темы   Непрочитано 09.02.2007, 09:45
#11
RЯков


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


Не знаю куда более подробно и членораздельно хмм :shock:
И как тут может справиться калькулятор??:
Вернее с этим конечно сейчас и справляеться калькулятор, и хорошо когда "намлук"( чтоб текст скопировать и в текст вставить ), а то "некоторым" удобнее под рукой машинку иметь следовательно опечатки и ошибки...[sm1711 ]
А предлагается действительно калькулятор, который работает с текстовыми элементами ...
Еще раз попытаюсь объяснить :[sm2504]
Давлю на кнопочку-выберите число-выбираю, ставлю знак,-выберите число-выбираю,ставлю знак-ит.д. выбираю,ставлю знак, энтер,-укажите точку вставки-указываю
все счастливы
Спасибо!
RЯков вне форума  
 
Автор темы   Непрочитано 09.02.2007, 09:54
#12
RЯков


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


> Pastor: Отлично! Полностью поддерживаю!
P.S. Сейчас выяснится, что стандартного калькулятора хватит за глаза

Типа такой я не понял намека ... [sm1710]
RЯков вне форума  
 
Непрочитано 09.02.2007, 10:30
#13
Олег К.

Инженер-теплотехник
 
Регистрация: 17.08.2006
Смоленск
Сообщений: 311


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

Забыл сказать, что выполняются только простые действия: +, -, * и /. Для вывода результата в текстовый объект необходимо наличае уже готового текста. Можно изменить существующий текст, либо создать новый (в этом случае прога просит указать текст-образец).
Олег К. вне форума  
 
Автор темы   Непрочитано 09.02.2007, 11:01
#14
RЯков


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


Вот это спасибо так спасибо ... не думал что она такая т.ть. здоровая !!получиться ...хмм , но все равно то что нужно!
Тока я наверное уберу те строчки, где прописано выбрать знак после запятой ты не против?
RЯков вне форума  
 
Непрочитано 09.02.2007, 13:56
#15
Олег К.

Инженер-теплотехник
 
Регистрация: 17.08.2006
Смоленск
Сообщений: 311


>> RЯков
Извини, что не ответил сразу. Не всегда нахожусь на своем рабочем месте (да и обед пропускать нельзя ).
Цитата:
Тока я наверное уберу те строчки, где прописано выбрать знак после запятой ты не против?
В смысле, количество цифр в числе после запятой? Да пожалуйста. Только посмотри внимательно, там дальше переменная textprecision используется при создании текста, вместо неё поставить нужную цифру. Эта конструкция используется в двух местах. И еще убери 3-ю и 9-ю строки в начальном комментарии :wink: .

Сейчас перечитал 5-й пост - "расстояние умножить на уклон отнять предыдущую отметку...". У программы есть такая особенность: если первым в тексте стоит не цифра, а любой другой символ (хоть пробел или "+"), число будет записано как ноль. Как-то не подумал, что будут складывать высотные отметки (там ведь "+" или "-" перед числом) и сделал по-простому.

А насчет объема кода - это да-а, сам удивился когда дописал. Впрочем, если убрать комментарии и проверки ошибок, можно уменьшить на 2/3. Но не стоит, не стоит.
Олег К. вне форума  
 
Автор темы   Непрочитано 09.02.2007, 15:12
#16
RЯков


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


Вот что называеться лучше день потерять потом зя пять минут долететь...
Клевая прога получилась
Тока вот как бы действия на клаву посадить, а не на контекстное меню.. тогда ваще высший пилотаж будет
RЯков вне форума  
 
Непрочитано 09.02.2007, 15:36
#17
Олег К.

Инженер-теплотехник
 
Регистрация: 17.08.2006
Смоленск
Сообщений: 311


Так ведь если отключить динамический ввод, все запросы выводятся в комстроку, соотв и ответы набираются с клавиатуры. У меня вообще динамич ввод всегда отключен, так и не привык к строке запроса возле курсора (поке еще этот курсор найдешь на экране). Зато комстрока высотой в 4 строчки - это считаю полезнее.
Олег К. вне форума  
 
Автор темы   Непрочитано 10.02.2007, 12:29
#18
RЯков


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


Ну это не суть..
Вчера и сегодня выполняю свою работу, за одно тестирую твой калькулятор ... сам конечнно такой сделать не смогу...
но ты просил критики- получай
( тока без обид я тока для пользы дела)
1) Алгоритм: команда, выбор текста или числа ... палец тянется нажать на знак- нажимаем (зачем подтверждение энтер?)
2)Следом открываеться диалоговое окно по умолчанию <выход>
хотя еслиб по умолчанию стояло число ,а ELSE текст ,а ELSE "укажите число- это не число" тогда КПД выросло бы на 30%
3)И далее не диалог, а IF энтер то результат изменить(ждет щелчка мышки по тексту), ELSER создает текст и уже тогда спрашивает укажите пример текста (т.е. один щелчек исправление два щелчка результат)
а ВООБЩЕ вчера правда за два часа на два раза(вылетал блок питания) работы выполнил которую мог бы делать наверное пол дня, но ошибок бы там было ... е мое
А ща попробую отключить, как ты говоришь, динамический ввод..
Хороших тебе выходных! еще раз спасибо!
RЯков вне форума  
 
Непрочитано 12.02.2007, 11:04
#19
Олег К.

Инженер-теплотехник
 
Регистрация: 17.08.2006
Смоленск
Сообщений: 311


... а техзадание все расширялось и усложнялось...

Критику воспринял, алгоритм приведен интересный, возможно реализую такой вариант для продвинутых пользователей (без запроса ввода действия и числа с клавы).

Теперь буду отвечать на критику, то есть оправдываться.
1. Выше я уже говорил, что не такой уж продвинутый программист, ковыряние с КАДом и программирование - это скорее хобби, помимо основной работы.
2. Зачем подтверждение энтер? Ну такова уж логика работы с КАДом. После набора команды, числа или еще чего в ответ на запрос - обязательно нажать Enter или Space. Тогда комп поймет, что ввод закончен и перйдет к обработке введенного значения (хотя что я объясняю, если ты работаешь в КАДе, то знать такое обязан).
3. Программа создавалась для юзеров, поэтому использовал наиболее простые функции, жесткое задание последовательности выполнения, постоянные проверки вводимых данных и подробные запросы с подсказками. Пока ни одна "обезьяна с гранатой" не смогла навернуть эту прогу.
4. Вначале прога была гораздо проще: выбирается действие, затем пользователь указывает тексты-числа с которыми это действие производится, и без лишних запросов. Показал у себя на работе продвинутым автокадчикам - "Нормально. А сделай так, чтобы знак действия менять в любой момент; и число с клавиатуры вводить; и вывод не только в комстроку, но и текст на чертеже менять/создавать новый; и чтобы количество цифр после запятой можно задавать было". Ну вот и результат. Вот и объем :shock: .
5. Алгоритм выполнения так и остался простым: выбираем текст с цифрой, автоматически запрашивается ввод действия; далее можно щелкать подряд на нужных текстах, а программа их все, скажем, просуммирует. Добавились только обвесы в виде опций.

Надеюсь, это прояснит, почему прога именно такая. Хотя не уверен, что стоило так расписывать, да ладно, пускай будет.
Олег К. вне форума  
 
Автор темы   Непрочитано 12.02.2007, 12:04
#20
RЯков


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


Пусть будет ! :P
RЯков вне форума  
 
Непрочитано 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
С.-Петербург
Сообщений: 40,431


А эти отметки - это что? Однострочные тексты, многострочные тексты, атрибуты, блоки с атрибутами? Что используется как разделитель целой и дробной части? Примерчик, плиз...
__________________
Моя библиотека 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,996


>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,996


А вот еще нашел в тему
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,611


Цитата:
Сообщение от 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
Просмотров: 47
Размер:	168.7 Кб
ID:	175833
moonalien23 вне форума  
 
Непрочитано 08.09.2016, 08:39
#31
Boxa

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


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

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


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


для Воха

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

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

Реклама i