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

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

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

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

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

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

Последний раз редактировалось Red Nova, 13.03.2009 в 10:11.
Просмотров: 163486
 
Непрочитано 20.05.2016, 08:13
#641
trushev


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


Цитата:
Сообщение от 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
С.-Петербург
Сообщений: 37,592


Цитата:
Сообщение от gomer Посмотреть сообщение
(setq pi 4) прекрасно работает
Ну так можно и (setq nil t) запустить Если ума палата...
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 23.05.2016, 09:30
#643
gomer

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


Цитата:
Сообщение от Кулик Алексей 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
С.-Петербург
Сообщений: 37,592


Цитата:
Сообщение от gomer Посмотреть сообщение
А, дудки! Защищенный символ...
Типа pi не защищенный. У тебя такие настройки, так что не надо
Цитата:
Сообщение от gomer Посмотреть сообщение
в лиспе принято константы обрамлять плюсами, а глобальные переменные звездочками, инициализировать и в начале файла и оснащать уникальными приставками
Таких явных правил в AutoLISP нет. Это уже больше добрая воля лиспописателей
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 24.05.2016, 08:11
#645
trushev


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


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


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


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


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


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


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


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


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


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

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

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

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

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,877
<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
Сообщений: 276


VVA, моя благодарность! Обе команды работают как надо.
Спасибо!
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