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

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

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

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

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

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

Последний раз редактировалось Red Nova, 13.03.2009 в 10:11.
Просмотров: 196216
 
Непрочитано 26.01.2008, 19:13
#2
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Видишь - Щитать никто не хочет.
Если бы у тебя был не MText, а Text, то я бы предложил посмотреть сюда:
http://www.caduser.ru/cgi-bin/f1/board.cgi?t=19574jg
Profan вне форума  
 
Непрочитано 26.01.2008, 19:23
#3
T-Yoke

Артиллерист - вертолётчик. Дипломированный инженер-механик. Technologist
 
Регистрация: 29.11.2004
Где-то около Москвы
Сообщений: 16,516
Отправить сообщение для T-Yoke с помощью Skype™


Цитата:
Сообщение от Red Nova Посмотреть сообщение
Я не пользуюсь таблицами AutoCADа, черчу ячейки, в них по мтексту. Вопрос как оперативно сощитать сумму цифр их содержимого. Слышал есть такой калькулятор, по моему calcacad называется, но на 2008-й Cad не идет. Что делать?
Блин, пора розги применять в школах. Народ совсем русского языка не знает. Может тогда начнёт считать, а не щитать
__________________
«Артиллерия не токмо грохот, но и наука!» Пётр I
T-Yoke вне форума  
 
Автор темы   Непрочитано 26.01.2008, 21:09
#4
Red Nova

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


Да да, все верно , поправил. Я это, русский в школе не проходил. А как на счет по теме вопроса?
Red Nova вне форума  
 
Автор темы   Непрочитано 26.01.2008, 21:21
#5
Red Nova

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


Profan По указанной ссылке есть и для мтекса вариант. Большое спасибо..
Код выглядит так

Цитата:
(defun c:z-calc-text-value (/ value ent obj ss)
(vl-load-com)
(princ
"\nВыберите текстовые объекты среди которых будет произведененна калькуляция"
) ;_ princ
(setq ss (ssget '((0 . "TEXT,MTEXT"))))
(if (not ss)
(princ "Не выбраны объекты")
(progn
(setq
value (rtos
(apply
(function +)
(mapcar
(function
(lambda (a)
(atof
(vl-string-trim
"%Uu {\\Ll}"
(vl-string-subst
"."
","
(cdr (assoc 1 (entget a)))
) ;_ vl-string-subst
) ;_ vl-string-trim
) ;_ atof
) ;_ lambda
) ;_ function
(vl-remove-if
(function listp)
(mapcar (function cadr)
(ssnamex ss)
) ;_ mapcar
) ;_ vl-remove-if
) ;_ mapcar
) ;_ apply
) ;_ rtos
) ;_ setq
(if (vl-string-position (ascii ".") value)
(setq value (vl-string-right-trim ".0" value))
) ;_ if
(setq value (vl-string-subst "," "." value))
(princ (strcat "\n Сумма = " value))
(alert (strcat "Сумма = " value "\nУкажите точку вставки "))
(setvar "ERRNO" 0)
(if (and ent
(vlax-property-available-p
(setq obj (vlax-ename->vla-object ent))
'TextString
) ;_ vlax-property-available-p
) ;_ and
(progn
(vlax-put-property obj 'TextString value)
(vlax-release-object obj)
) ;_ progn
) ;_ if
) ;_ progn
) ;_ if


(setq pt2 (getpoint))
(setq r (* (getvar "DIMSCALE") (getvar "DIMTXT")))
(command "_text" pt2 r 0 value)

(princ)
) ;_ defun

Последний раз редактировалось Red Nova, 27.01.2008 в 00:27.
Red Nova вне форума  
 
Непрочитано 26.01.2008, 21:51
#6
Клякса

Инженер
 
Регистрация: 15.08.2007
Питер
Сообщений: 36
<phrase 1=


Попробуй следующий код:

Sub SummaMText()

Dim SelSetColl As AcadSelectionSets
Dim CirSet As AcadSelectionSet
Dim item As AcadMText
Dim Summa As Double

Set SelSetColl = ActiveDocument.SelectionSets
Set CirSet = SelSetColl.Add("Mt")
CirSet.Select acSelectionSetAll '

For Each item In CirSet
Summa = Summa + CDbl(item.TextString)
Next item

CirSet.Delete
Set CirSet = Nothing
Set SelSetColl = Nothing

MsgBox Summa ' выводит сумму в окне

End Sub



Эта прога тупо перебирает все входящие в активный чертеж МТексты и выдает в окне сумму входящих в них чисел.
Если нужна сумма не всех имеющихся МТекстов, а только по выбору, или сумму выводить не в окне, а в другом Мтексте, то код надо будет доработать.

ЗЫ: Гы, пока я писал код, сам нашел :-)
__________________
Ошибку нашел и исправил, но в чем она заключалась, так и не понял...
Клякса вне форума  
 
Автор темы   Непрочитано 27.01.2008, 11:46
#7
Red Nova

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


А как на счет того, чтоб проводить более сложные вычисления, отмечая цифры мтекста. Скажем отнять, умножить, вознести в квадрат. Для этих целей наверное программка посложнее нужна, с интерфейсом похожим на калькулятор. Никто не знает такой для 2008-го?
Red Nova вне форума  
 
Непрочитано 02.02.2008, 19:37
#8
Клякса

Инженер
 
Регистрация: 15.08.2007
Питер
Сообщений: 36
<phrase 1=


Теоретически можно все, и интерфейс в виде калькулятора и математические действия.
А чем тебя штатный калькулятор не устраивает?
__________________
Ошибку нашел и исправил, но в чем она заключалась, так и не понял...
Клякса вне форума  
 
Автор темы   Непрочитано 02.02.2008, 21:30
#9
Red Nova

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


штатный калькулятор не работает с цифрами из мтекста.
Red Nova вне форума  
 
Автор темы   Непрочитано 02.02.2008, 21:38
#10
Red Nova

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


Лисп с поста 5 работает так. Выбираешь мтксты или тексты, enter выходит сообщение что сумма цифр равна ***. Далее указываешь точку где в последствии появляется мтекст с содержащейся искомой в нем суммой. Программа хорошая, но уж очень хочется чтоб в конце сумма не выводилась в новом мтексте, а записывалась в уже существующий мтекст по принципу оверрайт. Прошу помочь с переделкой лиспа.
Red Nova вне форума  
 
Непрочитано 03.02.2008, 06:19
#11
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,535
<phrase 1= Отправить сообщение для wetr с помощью Skype™


Цитата:
Сообщение от Red Nova Посмотреть сообщение
Лисп с поста 5 работает так. Выбираешь мтксты или тексты, enter выходит сообщение что сумма цифр равна ***. Далее указываешь точку где в последствии появляется мтекст с содержащейся искомой в нем суммой. Программа хорошая, но уж очень хочется чтоб в конце сумма не выводилась в новом мтексте, а записывалась в уже существующий мтекст по принципу оверрайт. Прошу помочь с переделкой лиспа.
В Веткаде есть подобная штука. Хочешь вставит новый объект, хочешь вставит ответ в существующий примитив. Может суммировать или суммировать с умножением. Одно НО - работает только с текстом.
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Автор темы   Непрочитано 03.02.2008, 09:43
#12
Red Nova

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


У меня в файлах только мтекст
Red Nova вне форума  
 
Непрочитано 03.02.2008, 17:33
#13
Клякса

Инженер
 
Регистрация: 15.08.2007
Питер
Сообщений: 36
<phrase 1=


С ЛИСПом не знаком, а на VBA попробовать можно.
Скинь небольшой файл, с которым можно работать. Укажи, какие МТЕксты складывать (или какие другие мат. вычисления), а в какой - вставлять результат... Может, там какие критерии есть для выделения или еще что... Без этого задача кажется совсем неопределенной...
__________________
Ошибку нашел и исправил, но в чем она заключалась, так и не понял...
Клякса вне форума  
 
Непрочитано 03.02.2008, 17:34
#14
Клякса

Инженер
 
Регистрация: 15.08.2007
Питер
Сообщений: 36
<phrase 1=


А штататный кальк вполне работает с цифрами из МТекста, если их туда скопипастить ;-)
__________________
Ошибку нашел и исправил, но в чем она заключалась, так и не понял...
Клякса вне форума  
 
Автор темы   Непрочитано 03.02.2008, 21:19
#15
Red Nova

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


В штатном калькуляторе цифры надо копировать поштучно, а используя лисп с поста 5 можно отметить разом нужные мтексты содержащиеся в которых цифры надо сложить, и результат выводится в новом мтексте, только мне удобнее чтоб результат вписывался в уже существующий мтекст.
>Критерий никаких при выделении нет, выделяешь нужные мтексты, те что рядом – рамкой, другие поштучно, enter, результат готов.
Попробуй попользоваться Лиспом с поста 5, думаю станет понятно.
А экспериментировать можешь с любым файлом где создано несколько мтекстов с содержащимися в них цифрами, скажем 2, 15, 56. Выделяешь их, складываешь, насколько я помню алгебру, результат равен 73, ну или возле того.
Red Nova вне форума  
 
Непрочитано 04.02.2008, 12:45
#16
a-alex

конструктор
 
Регистрация: 05.03.2007
Сообщений: 64


Цитата:
Сообщение от Red Nova Посмотреть сообщение
Лисп с поста 5 работает так. Выбираешь мтксты или тексты, enter выходит сообщение что сумма цифр равна ***. Далее указываешь точку где в последствии появляется мтекст с содержащейся искомой в нем суммой. Программа хорошая, но уж очень хочется чтоб в конце сумма не выводилась в новом мтексте, а записывалась в уже существующий мтекст по принципу оверрайт. Прошу помочь с переделкой лиспа.
Этот лисп есть по этой ссылке
Цитата:
Сообщение от Profan Посмотреть сообщение
Код:
[Выделить все]
(defun c:z-calc-text-value (/ value ent obj ss)
  (vl-load-com)
  (princ
    "\nВыберите текстовые объекты среди которых будет произведененна калькуляция"
    ) ;_ princ
  (setq ss (ssget '((0 . "TEXT,MTEXT"))))
  (if (not ss)
    (princ "Не выбраны объекты")
    (progn
      (setq
  value (rtos
    (apply
      (function +)
      (mapcar
        (function
          (lambda (a)
      (atof
        (vl-string-trim
          "%Uu {\\Ll}"
          (vl-string-subst
            "."
            ","
            (cdr (assoc 1 (entget a)))
            ) ;_ vl-string-subst
          ) ;_ vl-string-trim
        ) ;_ atof
      ) ;_ lambda
          ) ;_ function
        (vl-remove-if
          (function listp)
          (mapcar (function cadr)
            (ssnamex ss)
            ) ;_ mapcar
          ) ;_ vl-remove-if
        ) ;_ mapcar
      ) ;_ apply
    ) ;_ rtos
  ) ;_ setq
      (if (vl-string-position (ascii ".") value)
  (setq value (vl-string-right-trim ".0" value))
  ) ;_ if
      (princ (strcat "\n Сумма = " value))
      (alert (strcat "Сумма = " value))
      (setvar "ERRNO" 0)
      (while
  (and (not (setq  ent
       (car
         (nentsel
           (strcat
             "\n Выберите текстовый объект для записи значения <Выход>:"
             ) ;_ strcat
           ) ;_ entsel
         ) ;_ car
      ) ;_ setq
      ) ;_ not
       (equal (getvar "ERRNO") 7)
       ) ;_ and
   (setvar "ERRNO" 0)
   ) ;_ while
      (if (and ent
         (vlax-property-available-p
     (setq obj (vlax-ename->vla-object ent))
     'TextString
     ) ;_ vlax-property-available-p
         ) ;_ and
  (progn
    (vlax-put-property obj 'TextString value)
    (vlax-release-object obj)
    ) ;_ progn
  ) ;_ if
      ) ;_ progn
    ) ;_ if
  (princ)
  ) ;_ defun
a-alex вне форума  
 
Автор темы   Непрочитано 04.02.2008, 14:49
#17
Red Nova

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


Спасибо, там и вправду все так как мне надо. Надо мне быть повнимательней.
Red Nova вне форума  
 
Непрочитано 05.02.2008, 12:06
#18
a-alex

конструктор
 
Регистрация: 05.03.2007
Сообщений: 64


Цитата:
Сообщение от Red Nova Посмотреть сообщение
используя лисп с поста 5 можно отметить разом нужные мтексты содержащиеся в которых цифры надо сложить, и результат выводится в новом мтексте, только мне удобнее чтоб результат вписывался в уже существующий мтекст.
Никто не видел лисп- тоже самое только с умножением.
a-alex вне форума  
 
Непрочитано 05.02.2008, 12:46
#19
Кулик Алексей aka kpblc
Moderator

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


Ну замени
Код:
[Выделить все]
(apply
      (function +)
на
Код:
[Выделить все]
(apply
      (function *)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 05.02.2008, 13:01
#20
a-alex

конструктор
 
Регистрация: 05.03.2007
Сообщений: 64


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Ну замени
Код:
[Выделить все]
(apply
      (function +)
на
Код:
[Выделить все]
(apply
      (function *)
У меня были смутные догадки, но подумал что это слишком просто.
Спасибо Алексей!
a-alex вне форума  
Ответ
Вернуться   Форум 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