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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как сосчитать сумму цифр из отдельных мтекстов (и лисп для подсчета спецификаций)

Как сосчитать сумму цифр из отдельных мтекстов (и лисп для подсчета спецификаций)

Ответ
Поиск в этой теме
Непрочитано 26.01.2008, 13:15
Расчет спецификаций из мтекстов
Red Nova
 
ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Торонто
Регистрация: 23.10.2007
Сообщений: 1,980

Я не пользуюсь таблицами AutoCADа, черчу ячейки, в них по мтексту. Вопрос как оперативно соcчитать сумму цифр их содержимого. Слышал есть такой калькулятор, по моему calcacad называется, но на 2008-й Cad не идет. Что делать?

Добавлено.
Постепенно форум перешел в разработку липа для расчета спецификаций из мтекстов, и расчет суммы из мтекстов стал просто полезной добавкой к расчету спецификации. Последний вариант программы находится тут

Последний раз редактировалось Red Nova, 13.03.2009 в 10:11.
Просмотров: 196217
 
Непрочитано 05.02.2008, 16:14
#21
Олег К.

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


Где-то здесь уже выкладывал этот лисп, но даже сам найти не смог , поэтому повторюсь.
Программа написана без использования vla-функций, работает на 2002-м АвтоКАДе, по идее пойдет и на Brics/ZW/Proge CADах.

PS: Что за прикол с похожими темами? Это по какому критерию они похожи?
Вложения
Тип файла: lsp TextCalc-v4.1.LSP (11.0 Кб, 383 просмотров)
Олег К. вне форума  
 
Автор темы   Непрочитано 05.02.2008, 18:37
#22
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


Олег К. Проверил на 2008-ом, не работает, выводит сообщение
Цитата:
Укажите текст или [ Число / Функция / Результат / Выход] <Выход>:
но дальше пишет прервано пользователем.
Red Nova вне форума  
 
Непрочитано 05.02.2008, 19:39
#23
Олег К.

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


>> Red Nova
Ну-у, собснно, в 2008-м я не тестировал, даже не видел .
Только что проверил этот же файл на седьмом - все работает.
После первого запроса Esc случайно не нажали? Если нет, тогда в коде убрать переопределение функции *error*, и посмотреть, какую ошибку выдает.

Это что-то: ни у кого из знакомых нет АвтоКАДа 2008! Так что сам никак проверить не смогу.
Олег К. вне форума  
 
Автор темы   Непрочитано 05.02.2008, 21:53
#24
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


Дома прогнал на 2007-м, тоже самое, не работает, а на домашнем 2008-м (у меня и тот и другой стоят) работает, но как я понял не совсем корректно.
После запуска команды
1.Укажите текст или [ Число / Функция / Результат / Выход] <Выход>:
Дальше если нажать на кокой–либо текст выходит вот что
2.Выберите действие [ + / - / * //] <Отмена>:
Выбираешь Кокой–то знак, далее в ком. строке пишется идущее вычисление, если выбрать подменю, скажем
3.Результат
Тогда выходит послание
4.Вы хотите выйти без сохранения результата вычислений? [Да / Нет] <Нет>

По–моему после пунктов 1 и 3 идет неправильное действие. И почему это интересно программа так непостоянна, более менее заработала на одном компьютере из трех.
Red Nova вне форума  
 
Непрочитано 06.02.2008, 10:29
#25
Олег К.

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


Странно, впервые с таким сталкиваюсь. Есть большой парк машин, когда-то проверял на 2002, 4, 6, 7 АвтоКАДах и на разных машинах - везде работало нормально. Может надстройки какие-то есть, вроде СПДСа? Хотя не должно бы влиять.
При правильной работе должно выглядеть так:
Код:
[Выделить все]
Command: textcalc enter

  ВЫЧИСЛЕНИЕ ТЕКСТА
 Укажите текст или [ Число / Функция / Результат / Выход] <Выход>:  ткнул на текст с числом 2

 Выберите действие [ + / - / * //] <Отмена>: + enter

 Укажите текст или [ Число / Функция / Результат / Выход] <Выход>: ткнул на второй текст, число 9
   Результат:  2.000 + 9.000 = 11.000
 Укажите текст или [ Число / Функция / Результат / Выход] <Выход>: ф enter

 Выберите действие [ + / - / * //] <Отмена>: * enter

 Укажите текст или [ Число / Функция / Результат / Выход] <Выход>: ткнул на текст с числом 5
   Результат:  11.000 * 5.000 = 55.000
 Укажите текст или [ Число / Функция / Результат / Выход] <Выход>: ч enter
 Введите число <Отмена>: 12 enter

   Результат:  55.000 * 12.000 = 660.000
 Укажите текст или [ Число / Функция / Результат / Выход] <Выход>: р enter
 Изменить существующий текст или создать новый? [Изменить / Создать]: и enter
 Выберите текст для изменения:
Select objects: ткнул на текст в который будет записан результат

 Сколько оставить цифр после запятой [0 - 5] <1>:enter

 Продолжить вычисления, начать новые или выход? [Продолжить / Новый / Выход]: в enter
 END
Command:
Курсивом действия не отображаемые в командной строке.
В начале выбираемых текстов обязательно должны быть какие-либо цифры, если что другое - такой текст не считается числом. Если в начале работы программы выбрано или введено с клавиатуры число автоматически появится запрос на выбор действия (+-*/); если в начале было задано это действие, то такого запроса не будет. Так что пункты 1 и 2 правильны. Есть возможность выбирать опции при любой раскладке клавиатуры, т.е. а(англ)=ф, d=в(рус), x(англ)=ч и т.д.
Цитата:
Выбираешь Кокой–то знак, далее в ком. строке пишется идущее вычисление
Да не может такого быть, по логике программы невозможно вычисление при отсутствии одного из чисел.
Если программа не работает по приведенному выше сценарию, выложите здесь пример файла с текстами (в формате 2004 или 7 КАДа) и листинг из комстроки с запросами программы и Вашими ответами.

Последний раз редактировалось Олег К., 06.02.2008 в 10:41.
Олег К. вне форума  
 
Автор темы   Непрочитано 06.02.2008, 12:40
#26
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


На работе вчера менял AutoCAD, сейчас программка тут работает. С одним из вопросов разобрался, остался вот кокой вопрос. После этой строки

Укажите текст или [ Число / Функция / Результат / Выход] <Выход>: р enter

какое подменю я б не выбрал, пишет

Вы хотите выйти без сохранения результата вычислений? [Да / Нет] <Нет>

Следовательно, не выходит никуда вписать результат.
Red Nova вне форума  
 
Непрочитано 06.02.2008, 13:02
#27
Кулик Алексей aka kpblc
Moderator

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


Попробуй выбирать через конт.меню.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 06.02.2008, 13:53
#28
Олег К.

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


"Ничё не понимаю" ©Колобки.

Хотя стоп. Вы же вводите опции по русски? Тогда возможно виновата русская кодировка. У меня ANSI 1251. Попробуйте вводить опции в английской раскладке (выше упоминал).
Остается только такое решение. Похоже при неопознанной опции сбрасывается в "пустой ввод", а он по умолчанию = выходу.

Последний раз редактировалось Олег К., 06.02.2008 в 14:00.
Олег К. вне форума  
 
Автор темы   Непрочитано 06.02.2008, 19:47
#29
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


Олег К .Попробовал с клавы, заработало. Спасибо.

Товарищи программисты, есть вопрос по Лиспу с поста 16. С применением этого лиспа, после того как все нужные цифры выбраны, когда жмешь enter вылетает сообщение, что сумма мол такая–та. Жмешь на OK, после этого выбираешь мтекст в который надо все вписать.
Можно ли убрать из последовательности вылетающее окно с сообщением о результате? То–есть выбрал цифры которые надо сложить, enter, выбрал текст в который вписываешь результат, enter, конец.
Red Nova вне форума  
 
Непрочитано 07.02.2008, 09:36
#30
VVA

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


Находишь в тексте красную строчку
Код:
[Выделить все]
 
(princ (strcat "\n Сумма = " value))
(alert (strcat "Сумма = " value))
(setvar "ERRNO" 0)
И ставишь перед ней точку с запятой. Чтобы было так
Код:
[Выделить все]
 
(princ (strcat "\n Сумма = " value))
; (alert (strcat "Сумма = " value))
(setvar "ERRNO" 0)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 07.02.2008, 12:35
#31
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


VVA Спасибо.
Red Nova вне форума  
 
Автор темы   Непрочитано 07.02.2008, 20:08
#32
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


Еще один вопрос к программистам. Лисп отзывается только когда клавиатура на английском, если в этот момент печатаешь на русском, то приходится менять язык для вызова Лиспа. Подскажите пожалуйста как сделать так, чтоб лисп вызывался и в случае ввода русских букв соответственного расположения на клавиатуре?
Red Nova вне форума  
 
Непрочитано 08.02.2008, 09:26
#33
VVA

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


Это ты про какой лисп? Уточни. Тут их много
По поводу русских букв, ты имеешь ввиду вызов команды или опции?
Для команд:
для примера возьмем лисп из #16
Там определена команда:
(defun c:z-calc-text-value (/ value ent obj ss)
далее по тексту
И добавляем свои команды (например команду Z и Я)
Код:
[Выделить все]
 
(defun C:Z () (c:z-calc-text-value))
(defun C:Я () (c:z-calc-text-value))
Теперь от раскладки ничего не зависит

__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 08.02.2008, 09:58
#34
Олег К.

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


А можно просто сделать кнопку с таким макросом:
^C^C(load "D:/ACAD/LISP/z-calc-text-value.lsp");z-calc-text-value
Олег К. вне форума  
 
Автор темы   Непрочитано 08.02.2008, 11:16
#35
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


VVA Еще раз спасибо, речь шла именно об этом лиспе.
Олег К. Для многих команд я именно так и делаю.
Red Nova вне форума  
 
Автор темы   Непрочитано 11.02.2008, 12:17
#36
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


C мтекстом разобрались, а как суммировать содержания размеров?
Red Nova вне форума  
 
Непрочитано 11.02.2008, 15:36
#37
Олег К.

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


Для подсчета размеров, но только не переопределенных вручную.
Заменить соответствующие строки программы приведенными ниже:
Код:
[Выделить все]
;----- Действия программы при выборе текстового примитива
   (if (= (type oneobj) 'list)
     (progn ; _1
       (if (= (type (setq oneobj (car oneobj))) 'ename)
         (progn ; _2
	   (cond
	     ((equal (cdr (assoc 0 (entget oneobj))) "DIMENSION")
	      (setq numtext (cdr (assoc 42 (entget oneobj))))
	     ) ; oneobj - размер
	     ((vlax-property-available-p (vlax-ename->vla-object oneobj) 'textstring)
	      (setq numtext (_Cris-UnfTextStr (vla-get-TextString (vlax-ename->vla-object oneobj))))
	     ) ; oneobj - текст
	     (T (princ "\n Этот объект не текст. Выберите еще раз") (princ)
	     ) ; oneobj - любой другой объект AutoCAD'а
	   ) ; cond
	   (setq oneobj nil)
         ) ; progn_2
       ) ;  if(type)=ename
     ) ; progn_1
   ) ;  if(type)=list
    
;----- Действия программы при выборе опции ввода числа с клавиатуры
Редактировать файл в автокадовском Visual LISP Editore, либо в чём-то вроде Notepad++.

а, и еще изменить номер версии на 4.2
Олег К. вне форума  
 
Автор темы   Непрочитано 12.02.2008, 13:58
#38
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


Олег К. Спасибо, работает. А можно так сделать, чтоб в конце можно было результат не в текст списать, а в размер вписать, по принципу text overwrite? И как с размерами, которые уже overwrite? Их тоже иногда сосчитать нужно бывает.
Red Nova вне форума  
 
Автор темы   Непрочитано 12.02.2008, 14:13
#39
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


Нашел подобную команду в toolpac, есть возможность вписать результат в размер. хорошая вещ всем советую. Плохо там то что считает с несколькими цифрами после запятой (не округляет). И с overwrite тоже туго.
Red Nova вне форума  
 
Непрочитано 12.02.2008, 14:14
#40
Олег К.

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


Сделаю, но быстро не обещаю, своей работы привалило.
Завтра к вечеру-послезавтра.

Для взятия переопределенных размеров строки 61-63 заменить на следующее:
Код:
[Выделить все]
((equal (cdr (assoc 0 (entget oneobj))) "DIMENSION")
	      (if (eq (cdr (assoc 1 (entget oneobj))) "")
		(setq numtext (cdr (assoc 42 (entget oneobj))))
		(setq numtext (atof (cdr (assoc 1 (entget oneobj)))))
	      ) ; if
	     ) ; oneobj - размер

Последний раз редактировалось Олег К., 12.02.2008 в 14:30.
Олег К. вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как сосчитать сумму цифр из отдельных мтекстов (и лисп для подсчета спецификаций)

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сейсмозащита и сейсмоизоляция существующих, построенных зд. IANationalInformAgentstvo Прочее. Архитектура и строительство 216 20.01.2015 16:51
Предложения по расчетным моделям сооружений aldt Расчетные программы 8 06.07.2009 17:53
Мониторы LCD CRT Разное 94 17.06.2008 10:51
ЮМОР 2006 =) Perezz!! Разное 1122 04.01.2007 00:46