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

Вернуться   Форум 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.
Просмотров: 196204
 
Непрочитано 20.05.2016, 08:13
#641
trushev


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


Цитата:
Сообщение от gomer Посмотреть сообщение
вообще-то это не так
(setq pi 4) прекрасно работает
Интересно, а какое тогда значение у константы?
trushev вне форума  
 
Непрочитано 20.05.2016, 08:24
#642
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от gomer Посмотреть сообщение
(setq pi 4) прекрасно работает
Ну так можно и (setq nil t) запустить Если ума палата...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 23.05.2016, 09:30
#643
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Ну так можно и (setq nil t)
А, дудки! Защищенный символ...
Цитата:
Сообщение от trushev Посмотреть сообщение
а какое тогда значение у константы?
четыре
Вообще в лиспе принято константы обрамлять плюсами, а глобальные переменные звездочками, инициализировать и в начале файла и оснащать уникальными приставками
gomer вне форума  
 
Непрочитано 23.05.2016, 10:05
#644
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от gomer Посмотреть сообщение
А, дудки! Защищенный символ...
Типа pi не защищенный. У тебя такие настройки, так что не надо
Цитата:
Сообщение от gomer Посмотреть сообщение
в лиспе принято константы обрамлять плюсами, а глобальные переменные звездочками, инициализировать и в начале файла и оснащать уникальными приставками
Таких явных правил в AutoLISP нет. Это уже больше добрая воля лиспописателей
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 24.05.2016, 08:11
#645
trushev


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


Цитата:
Сообщение от gomer Посмотреть сообщение
четыре
Offtop: Вспомнился Задорнов.
trushev вне форума  
 
Непрочитано 20.05.2019, 11:52
#646
posetitel


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


подниму старую тему.
в лиспе из сообщений подсчет ведется, если в спецификации число указано текстом и только в рамках одной таблицы.
а можно как-нибудь дополнить лисп, чтобы он считывал данные из таблиц промежуточных спецификаций в модели и заполнял сводную.
данные в промежуточных таблицах могут быть или тегами блока, или мультитекстом в начерченной таблице, или текстом в начерченной таблице, или значением в таблице автокада, как удобнее организовать лисп, под него и подстрою уже заполнение таблиц.
пример файла с вариантами и чего требуется прилагаю.
Вложения
Тип файла: dwg
DWG 2013
На форум.dwg (296.8 Кб, 51 просмотров)
posetitel вне форума  
 
Непрочитано 20.05.2019, 14:06
#647
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,001


а если через связь с экселем - можно же и обратно из акада в эксель обновленную таблицу выгружать. А в экселе собирайте уже что нужно.
Сергей812 вне форума  
 
Непрочитано 20.05.2019, 14:18
#648
posetitel


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


связь с экселем - там свои нюансы, не совсем то
хотел бы лиспом по чертежу пробежать, просмотрел позиции, умножил на коэффициент и выгрузил в другую табличку
posetitel вне форума  
 
Непрочитано 02.02.2020, 15:44
#649
MrBrown

ПенсионЭр
 
Регистрация: 26.06.2009
Сообщений: 359


Здравствуйте!
Давно пользуюсь коротеньким удобным лиспом для суммирования чисел.
Недавно понадобилось подсчитать числа в Мтекстах, окружённые буквами и другими знаками.
Увидел здесь такую строчку:

(WCMATCH "*L=*"); определяем длину

Догадался, что это где-то рядом с моей "хотелкой", но куда и как вставить её, не знаю.
Прошу помощи, помогите усовершенствовать код.
В приложенном чертеже необходимо сложить все длины, т.е. все числа между "L=" и "мп". Пару-тройку чисел я закрасил красным (все раскрашивать поленился).
Одновременно макрос не должен, при выделении чертежа рамкой, суммировать лишние числа (закрашены синим).
Возможно, что в некоторых Мтекстах нужные для суммирования числа имеют лишние пробелы слева или справа. Это тоже надо учесть в макросе
Спасибо.

p.s. в идеале хорошо бы общую сумму вставить первым числом в таблице (на листе в ведомости красное число). Но, если этот идеал потребует значительного усложнения макроса, то не нужно.
p.p.s уже в конце своего поста подумал: а, может быть, в самой ячейке таблицы можно вставить соответствующую формулу и обходиться без лиспа?
Подскажите, пожалуйста.
Вложения
Тип файла: lsp Sum.lsp (509 байт, 116 просмотров)
Тип файла: dwg
DWG 2010
111.dwg (615.3 Кб, 58 просмотров)
MrBrown вне форума  
 
Непрочитано 02.02.2020, 21:57
1 | #650
VVA

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


Пробуй две команды SUM1 и SUMT1
Код:
[Выделить все]
;_*** Сумма числовых значений ***
;_ https://forum.dwg.ru/showthread.php?p=1852137#post1852137

(defun c:sum1 (/ fld)
  (vl-load-com)
  (princ
    "\nВыберите текстовые объекты среди которых будет произведененна калькуляция"
  ) ;_ end of princ
  (princ
    (strcat
      "\nСумма = "
      (setq fld
      (rtos
        (apply
          (function +)
          (mapcar
            '(lambda (z)
               (atof (vl-string-subst
                       "."
                       ","
                       (vl-princ-to-string (cadr (str-str-lst z "L=")))
                     ) ;_ end of vl-string-subst
               ) ;_ end of atof
             ) ;_ end of lambda
            (vl-remove-if-not
              '(lambda (x)
                 (vl-string-search "L=" x)
               ) ;_ end of lambda
              (mapcar
                (function
                  (lambda (a)
                    (cdr (assoc 1 (entget a)))
                  ) ;_ end of lambda
                ) ;_ end of function
                (vl-remove-if
                  (function listp)
                  (mapcar (function cadr)
                          (ssnamex (ssget '((0 . "TEXT,MTEXT"))))
                  ) ;_ end of mapcar
                ) ;_ end of vl-remove-if
              ) ;_ end of mapcar
            ) ;_ end of vl-remove-if-not
          ) ;_ end of mapcar
        ) ;_ end of apply
        2
        1
      ) ;_end of rtos
            )
    ) ;_ end of strcat
  ) ;_ end of princ
  (princ)
)
(defun c:sumT1 (/ fld tstyle txt pt tblobj tblset row col)
  (vl-load-com)
  (or *TEXTSIZE* (setq *TEXTSIZE* (getvar "TEXTSIZE")))
  (princ
    "\nВыберите текстовые объекты среди которых будет произведененна калькуляция"
  ) ;_ end of princ
  (princ
    (strcat
      "\nСумма = "
      (setq fld
      (rtos
        (apply
          (function +)
          (mapcar
            '(lambda (z)
               (atof (vl-string-subst
                       "."
                       ","
                       (vl-princ-to-string (cadr (str-str-lst z "L=")))
                     ) ;_ end of vl-string-subst
               ) ;_ end of atof
             ) ;_ end of lambda
            (vl-remove-if-not
              '(lambda (x)
                 (vl-string-search "L=" x)
               ) ;_ end of lambda
              (mapcar
                (function
                  (lambda (a)
                    (cdr (assoc 1 (entget a)))
                  ) ;_ end of lambda
                ) ;_ end of function
                (vl-remove-if
                  (function listp)
                  (mapcar (function cadr)
                          (ssnamex (ssget '((0 . "TEXT,MTEXT"))))
                  ) ;_ end of mapcar
                ) ;_ end of vl-remove-if
              ) ;_ end of mapcar
            ) ;_ end of vl-remove-if-not
          ) ;_ end of mapcar
        ) ;_ end of apply
        2
        1
      ) ;_end of rtos
            )
    ) ;_ end of strcat
  ) ;_ end of princ

(setvar "cmdecho" 0)
(setq tstyle (getvar "TEXTSTYLE")) ;_Стиль текста Стиль должен существовать
    ;_ Создаем текст
(if (= (cdr (assoc 40 (tblsearch "STYLE" tstyle))) 0.0)
     ;; нулевая высота текста
   (vl-cmdf "_.-TEXT" "_S" tstyle "_none" '(0 0 0) *TEXTSIZE* 0 fld)
   (vl-cmdf "_.-TEXT" "_S" tstyle "_none" '(0 0 0) 0 fld)
   ) ;_ end of if
    (setq txt (entlast))
  ;_ Копируем в буфер и обратно
  (vl-cmdf "_updatefield" txt "")
  (princ "\n Укажите точку вставки текста или ячейку таблицы:")
  (vl-cmdf "_.copybase" (trans '(0 0 0) 0 1) txt "" "_.erase" txt "" "_.pasteclip" "_none" pause)
  ;_ В txt примитив текста в pt точка вставки  
  (setq txt (entlast) pt (getvar "LASTPOINT"))
  (or
    (and ;_Проверяем, попала ли точка в ячейку таблицы
      (setq  tblobj nil tblset (ssget "_X" (list '(0 . "ACAD_TABLE")(cons 410 (getvar "CTAB")))))
      (setq lst (mapcar 'vlax-ename->vla-object(vl-remove-if 'listp (mapcar 'cadr (ssnamex tblset)))))
      (progn
        (vl-catch-all-apply '(lambda()
        (mapcar '(lambda (x)
           (or tblobj
               (and
                 (= :vlax-true (vla-HitTest x
                               (vlax-3d-point (trans pt 1 0))
                               (vlax-3d-point (trans (getvar "VIEWDIR") 1 0))
                               'row 'col))
                 (setq tblobj x)
                 )
               )
           )
        lst)
                               )
          )
        tblobj
        )
       row col
      (or (vla-SetText tblobj row col fld) t)
      (entdel txt)
      )
    (and ;_Не попала, рисуем текст с полем
      (setq txt (vlax-ename->vla-object txt))
      (vlax-write-enabled-p txt)
      (vlax-method-applicable-p txt 'FieldCode) ;_есть метод FieldCode
      (vlax-property-available-p txt 'TextString)
      (vlax-put txt 'TextString fld)
      )
    )
  (princ)
) ;_ end of defun

 ;|
* Ф-ция str-str-lst
* Сервисная ф-ция извлечения из строки данных, разделенных
* каким либо символом или строкой символов
* Возвращает список строк
* Аргументы [Type]:
  str - строка для разбора [STRING]
  pat - разделитель [STRING]
*  Пример запуска
  (setq str "мы;изучаем;рекурсии" pat ";")
  (setq str "мы — изучаем — рекурсии" pat " — ")
  (str-str-lst str pat)
* Читать подробнее http://www.autocad.ru/cgi-bin/f1/board.cgi?t=25113OT
|;
(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
(princ "\nType in command line SUM1 and SUMT1")(princ)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 03.02.2020, 01:39
#651
MrBrown

ПенсионЭр
 
Регистрация: 26.06.2009
Сообщений: 359


VVA, моя благодарность! Обе команды работают как надо.
Спасибо!
MrBrown вне форума  
 
Непрочитано 23.09.2021, 09:13
#652
Villy Vaskof


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


Здравствуйте! Я наткнулся на данную тему благодаря поиску lisp для суммирования чисел в тексте автокад. Обрадовавшись найденному в данной теме, теперь есть необходимость установить полную подытоженную версию вашего lisp в данной теме. Но из-за отсутствия опыта в загрузке похожих файлов (комплект файлов) как в закрепленном архиве, я нуждаюсь в помощи. Подскажите пожалуйста, как установить все данные из архива (комплект) в закрепленном сообщений? Надеюсь моему вопросу ответят несмотря на прошедшее столько времени данной темы и она будет в помощь таким же не опытным пользователям.
Villy Vaskof вне форума  
 
Непрочитано 29.09.2021, 23:14
#653
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Villy Vaskof, в посте 564, куда ведет ссылка из стартового поста, в архиве есть файл readme.txt. Там - подробное русское описание процесса установки.
skkkk вне форума  
 
Непрочитано 11.10.2021, 14:36
#654
Villy Vaskof


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


skkkk, Здравствуйте! По вашему совету, еще в первом разе открывал данный файл readme из архива, но из-за своей не опытности я не понял ее как инструкцию для установки, для меня она как инструкция пользования.
Вопрос мой все еще остается для меня открытым, я скачал архив... затем распаковал архив и не понял как установить все файлы из архива в программу автокад.

Все файлы:
sumT.cui
sumT.cuix
sumT.LSP
sumT.mnl
sumT.mns
sumT.mnu
SumTE.bmp
SumTN.bmp
SumTSet.bmp
Спецификация.dwg
CS_Gost2304.shp
CS_Gost2304.shx
CSSTD.ttf
GOST 2.303-68.shx
GOST2304A.ttf
mipgost.shp
mipGost.shx
mipgost.ttf
prokat.ves
readme.txt
SPDS.shx
SumSpec.bmp
SumT.bmp
Villy Vaskof вне форума  
 
Непрочитано 13.10.2021, 08:29
#655
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Villy Vaskof, для начала вот: Как использовать лисп, опубликованный на форуме.

Все файлы надо расположить в папку с программой. Например, в папке C:\Program Files\Autodesk\AutoCAD 20ХХ создать папку PROGA, вставить файлы туда и добавить эту папку в пути доступа к вспомогательным файлам в настройках Автокада на вкладке Файлы. По ссылке рассказано подробнее об этом. Сам файл Спецификация.dwg будет шаблоном (насколько я понял - сам программой этой не пользовался).
Затем в автокаде ввести команду _menuload и выбрать из этой папки файл mnl (если не ошибаюсь - там вариантов не будет, вроде - будет только нужный файл маячить при выборе). Эта команда загрузит меню. Возможно, придется поколдовать, чтобы иконки появились, в меню адаптации (команда _cui) в панелях найти свою и задать одной из иконок путь к файлам bmp. Остальные должны сами подтянуться, если сразу не прогрузились.

----- добавлено через ~2 мин. -----
Вот здесь список команд, если меню не нужно.
skkkk вне форума  
 
Непрочитано 13.10.2021, 08:54
#656
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от skkkk Посмотреть сообщение
Все файлы надо расположить в папку с программой.
С чего вдруг? Достаточно
Цитата:
Сообщение от skkkk Посмотреть сообщение
добавить эту папку в пути доступа к вспомогательным файлам в настройках Автокада на вкладке Файлы
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.10.2021, 12:15
#657
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
С чего вдруг? Достаточно
Ну имел в виду, чтоб сразу человек задумывался об организации библиотеки лиспов, как пишет VVA в статье. В качестве примера написал. А так, конечно - любую папку можно добавить в пути доступа, скинуть все туда - и будет работать.
skkkk вне форума  
 
Непрочитано 14.10.2021, 10:12
#658
Villy Vaskof


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


skkkk, Добрый день! Благодарю за отклик, за подсказку! Он помог мне загрузить программу (не в полной мере иконки появились как предупредили, но по этому поводу не заморачивался).
Внесу поправку для cad 21 cuix надо загрузить, вместо mnl.
Кулик Алексей aka kpblc, Я воспользовался специально созданной папкой для программ в отдельном диске d.

Автору программы большой респект! Проделали большой Lean толчок для пользователей autocad!
Villy Vaskof вне форума  
 
Непрочитано 14.10.2021, 10:51
#659
Кулик Алексей aka kpblc
Moderator

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


А, еще момент (только сообразил) - про доверенные каталоги не стоит забывать, если secureload не 0.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 21.03.2023, 21:13
#660
MrBrown

ПенсионЭр
 
Регистрация: 26.06.2009
Сообщений: 359


Здравствуйте!
См. пост #650 от VVA. Там есть макрос, фильтрующий числа в Мтексте и суммирующий их.
Я понял, что он суммирует числа, стоящие после "L=".
Большая просьба к специалистам: подкорректируйте, пожалуйста, макрос, чтобы он суммировал только длины труб в Мтекстах, содержащих, кроме длины, диаметр и перенос на вторую строку (см. картинку).
Я пытался вместо "L=" вставить знак переноса в разных вариантах, не работает.
Спасибо.
Миниатюры
Нажмите на изображение для увеличения
Название: Макрос.jpg
Просмотров: 52
Размер:	104.0 Кб
ID:	254380  
MrBrown вне форума  
Ответ
Вернуться   Форум 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