|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
Поиск в этой теме |
|
||||
инженер Регистрация: 27.04.2006
Ростов-на-Дону
Сообщений: 33
|
Все нормально, заработала, но задача немножко в другом:
Это все можно и в Excele делать, таблицы, спецефикации и т.д, но возникает иногда необходимость сложить (умножить) группу цифр, расположенных на чертеже между собой. Единственная цель энтого действа, не перебивать все значения, полученные в результате так сказать черчения, потом на калькуляторе. Примерный алгоритм выполнения: 1 Выберите числа над которыми необходимо произвести действие; (рамкой выделяется группа чисел, над которыми хочется поглумится) 2 Укажите значение текста, подлежащее редактированию; (командой DDEDIT редактируется имеющийся однострочный текст) Примерно такая прога имеется: (defun c:CalcTXTVal(/ nab i) (print "Выберите текстовые объекты среди которых будет произведененна калькуляция") (setq nab (ssget '((0 . "TEXT"))) i 0) (while (/= (sslength nab) 0) (setq i (+ i (atof (vl-string-subst "." "," (cdr (assoc 1 (entget (ssname nab 0)))))))) (ssdel (ssname nab 0) nab)) (print (strcat "Сумма = " (rtos i 2 2))) (princ)) Только здесь сумма выводится в командную строку, а хотелось бы сразу на экран. И для удобства 2 программы, отдельно, для умножения и сложения. |
|||
|
||||
Project Engineer Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392
|
Не въехал. То, что выбранные чила можно складывать между собой, это понятно. Но перемножать...[sm2100] Может. все-таки каждое число из выбранной группы умножить на некий постоянный множитель? Проясните, плз. Пока что - держите сложение всего вместе.
Код:
|
|||
|
||||
инженер Регистрация: 27.04.2006
Ростов-на-Дону
Сообщений: 33
|
Огромное спасибо товарищу Лентяю за проявленное терпение и оказанную помощь, как расплачиваться буду прямо не знаю, может подскажешь?
И кстати вопрос: "Где находится граница между помощью и коммерцией, какого уровня сложности задачи решаются уже за денги?" |
|||
|
||||
Project Engineer Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392
|
Цитата:
Цитата:
Цитата:
|
|||
|
||||
Инженер-теплотехник Регистрация: 17.08.2006
Смоленск
Сообщений: 307
|
Сам пишу подобную прогу, нашел эту тему и решил добавить свои размышления (надеюсь, тему еще кто-то просматривает).
ACAD2006, в качестве стандартного шрифта у нас используется Arial Narrow. При взятии числа из текста с помощью конструкции: (setq numtext (atof (vl-string-translate "," "." (vla-get-textstring (vlax-ename->vla-object (car (entsel "\n Укажите текст:"))))))) возникает проблема с русскими символами, а точнее упорно выдает число 0.0 если раньше вместо цифр был какой-либо русский текст (типа: взяли MText с русскими буквами, скопировали его и заменили текст на число). Как ни странно такого не происходит если меняется латиница на число или создан новый MText с вводом числа в русской раскладке (запятая то, по идее, русским шрифтом пишется). Entget на русский текст выдает (1 . "{\\fArial Narrow|b0|i0|c204|p34;12.5}"), для сравнения латиница: (1 . "10,2"), или еще вариант: (1 . "qwerty {\\fArial Narrow|b0|i0|c204|p34;йцукен qwerty}"). Если кто знает, как получить содержимое текста без записей форматирования, УМОЛЯЮ, напишите. Кстати, попробовал прогу от Лентяя (пост №24) – отказывается воспринимать второе число, говорит “это не текст”, попробовал выбрать числа в обратном порядке – та же фигня. Извините что так длинно, не удивлюсь, если ответ на мою просьбу уместится в одной строке. |
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
1.http://www.autocad.ru/cgi-bin/f1/board.cgi?t=20905TQ
2.StripMtext v3.07 3. Может так по Код:
|
|||
|
||||
Инженер-теплотехник Регистрация: 17.08.2006
Смоленск
Сообщений: 307
|
Огромное спасибо, что подсказали где искать. Да-а, ответ действительно одной строкой . Понравилась программа от Kpblc’а, но объем великоват, так что применил функцию str-str-lst. У меня на компе работает замечательно, попробовал на другом – снова ошибки. В этот раз текст “793,44” записан в виде: (1 . "793{\\fArial Narrow|b0|i0|c204|p34;,}44"). И как теперь разделить мух с котлетами вообще не представляю, может есть у кого простое решение?
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,856
|
Код:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,856
|
> VVA : Думаю, тебе пригодится такое (для определения текущего разделителя):
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
Протестируйте такое. В принципе тоже что и у тебя, но компактнее
;;;Снятие формата с MTEXT ;;; Mtext - строка Мтекта типа "793{\\fArial Narrow|b0|i0|c204|p34;,}44" ;;;Возврат - строка без форматирования Код:
Код:
|
|||
|
||||
Инженер-теплотехник Регистрация: 17.08.2006
Смоленск
Сообщений: 307
|
А тема оказывается популярная. С утра просмотрел сообщения, спасибо всем, что указали “верный путь”. Придумал свой вариант снятия форматирования с текста, работает с однострочным и многострочным текстом, хотя в большом многострочном возможны косяки (один раз встретилось \\fArial Nar… вместо {\\fArial Nar…), не снимаются метки форматирования типа \n, \P, \L и т.п. Проверял на 2006 и 7 АвтоКАДе. Прошу сильно не бить за отсутствие проверок на ошибки, функция изначально задумывалась для одной цели: перевести текст “793,44” (как он выглядит на экране) в число 793.44 для дальнейших вычислений.
Код:
|
|||
|
||||
Инженер-теплотехник Регистрация: 17.08.2006
Смоленск
Сообщений: 307
|
В предыдущем сообщении отредактировал функцию снятия форматирования с текста – в таком виде использую ее в “калькуляторе текста”. В принципе этот калькулятор работает, но хотелось бы улучшить некоторые места. Поэтому очень прошу подсказать ответы на следующие вопросы, или дать ссылки на темы обсуждений (долго ковырял поиском этот форум и на AutoCAD.ru но ничего полезного не выловил).
1. Функция ssget : как избавиться от запроса “Select objects: ” ? 2. Функция initget используется в таком варианте: (initget "Число Функция Результат Выход X A H D _X A H D X A H D") (setq oneobj (entsel "\n Укажите текст или [ Число / Функция / Результат / Выход]: ")) - такой initget прописал, когда дал протестировать программу опытному пользователю и мне был задан вопрос “Почему я должен вводить команды только на русском? Может я не знаю какая раскладка включена, должна понимать и английский вариант.” Так вот, есть ли способ попроще (ну или покрасивше) заставить пользователя вводить только нужные мне данные (ткнуть текст или выбрать опцию)? 3. Этот вопрос является продолжением предыдущего. В ответ на запрос функции entsel можно ввести “L” и будет повторен последний выбор. Я то могу сказать юзерам “это не баг, это фича”, но самому же интересно как оно проскакивает мимо initget’a ?? 4. Можно ли программно, но не через конструкцию (vl-cmdf "_.-layer" "_U" "имя слоя" "") разблокировать слой? Информацию о состоянии слоя беру из таблицы слоев через (cdr (assoc 70 (tblsearch "LAYER" textlayer))). Простите, если вопросы покажутся глупыми, я ведь только учусь (а больше спрашивать то и некого) и заранее спасибо за ответы. Кстати, вопрос Модератору: не пора ли поменять название темы, скажем на “калькулятор текста”, или подобное? Так сказать, чтобы будущие поколения программистов могли быстрее найти нужную информацию. |
|||
|
||||
Project Engineer Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392
|
Цитата:
Код:
|
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
1. Функция ssget : как избавиться от запроса “Select objects: ” ?
(ssget "_X" фильтр) http://www.afralisp.net/lispa/lisp19.htm Самое полное описание в Vlisp'e F1 2. Если речь все-таки идет об опциях команды. Пусть пользователь объяснит тебе и нам, если он видит приглашение "Укажите текст или [ Число / Функция / Результат / Выход]: " Какой английский вариант он имеет ввиду? И почему английский, а не немецкий? Пусть почитает F1->Руководство полизователя->Пользовательский интерфейс->Окно команд->Ввод команд в командной строке->Задание опций команд. Это правило. 3. Вызови команду _MOVE. В ответ на запрос "Выберите объекты:" набери "qwe". Автокад ругнется и выдаст Цитата:
То же если в ответ на запрос (entsel) ввести "qwe" получим Цитата:
|
|||