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

Вернуться   Форум 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.
Просмотров: 196211
 
Автор темы   Непрочитано 22.07.2008, 11:14
#461
Red Nova

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


VVA,
Подскажи пожалуйста, может есть какие строки в лиспе SPEC5D, отвечающие за создание гиперссылок, и может их можно деактивировать? (проставить спереди строчки символ ";" )
__________________
Блог
Red Nova вне форума  
 
Непрочитано 22.07.2008, 11:43
#462
VVA

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


http://dwg.ru/f/showpost.php?p=223323&postcount=205
Если нужно удалить, то см. хелп при загрузке sumT.lsp (F2)
Цитата:
Опубликовано: http:////dwg.ru//f//showthread.php?t=16987 сборка(пост) #449
Наберите в командной строке
SumTN - суммирование тестов в новый текст
SumTE - суммирование тестов в существующий текст
MulTN - умножение тестов в новый текст
MulTE - умножение тестов в существующий текст
TOKR - округление текста
MulTC - перемножение текстов столбцами
MulTCv2 - перемножение текстов столбцами вариант 2
sumTSet - установки округления и высоты новых текстов
GSUM - рассчет групповой спецификации
SPECKG - рассчет спецификации (SPEC3 SPEC3D SPEC4 SPEC4D SPEC5 SPEC5D
SPECW - рассчет спецификации деревянных изделий (SPEC Wood
_-HYPERLINK - удаление гиперссылок (опция _Remove)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 22.07.2008, 12:10
#463
Red Nova

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


Это я знаю, но честно говоря HYPERLINK (опция _Remove) работает не всегда корректно, часто не удаляет, и еще у нее длинный диалог. Хотел узнать нет ли другого пути. (чтобы по проще)
__________________
Блог
Red Nova вне форума  
 
Непрочитано 22.07.2008, 12:17
#464
VVA

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


А сделать кнопку для длинного диалога?
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 22.07.2008, 12:52
#465
Red Nova

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


Ну кнопку можно, но если возможно лисп подправить, то не желательно каждый раз запускать после SPEC5D еще и HYPERLINK (опция _Remove). Экономия времени - хорошее дело.
__________________
Блог
Red Nova вне форума  
 
Непрочитано 22.07.2008, 13:05
#466
VVA

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


Тогда _hyperlinkoptions отключи гиперссылки и все
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 22.07.2008, 13:43
#467
Red Nova

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


А эта переменная в файле сохраняется или в Каде?
__________________
Блог
Red Nova вне форума  
 
Непрочитано 22.07.2008, 14:38
#468
VVA

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


Это команда
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 22.07.2008, 14:46
#469
Red Nova

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


Значит действует на весь кад, а это не желательно. Я часто файлы на сторону передаю, не хочу чтобы все ясно видели, что у меня работает некий лисп для спецификации. Народ бывает разный, не хочу чтобы “нежелательные персонажи” задавали лишние вопросы. По этому если был бы вариант подправить лисп было бы хорошо.
__________________
Блог
Red Nova вне форума  
 
Непрочитано 22.07.2008, 14:55
#470
VVA

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


Найди в файле описание функции
Код:
[Выделить все]
; Ф-ция mip-put-hyperlink
; Возвращает nil.
; Arguments [Type]:
;   Ename = Object [ENAME]
;  URLDescription = Строка [STR]
; Если строка "", то ссылка удаляется
(defun mip-put-hyperlink (ENAME URLDescription)
  (if (eq (type ENAME) 'ENAME)
    (setq ENAME (vlax-ename->vla-object ENAME))
  ) ;_ end of if
  (vlax-for hyp (vla-get-hyperlinks ENAME) (vla-delete hyp))
  (if (/= URLDescription "")
  (vla-add (vla-get-hyperlinks ENAME)
           "about:blank"
           URLDescription
  ) ;_ end of vla-add
    )
) ;_ end of DEFUN
Закоментарь ее
А рядом помести эту
Код:
[Выделить все]
(defun mip-put-hyperlink (ENAME URLDescription)(princ))
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 22.07.2008, 15:02
#471
Red Nova

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


В смысле удалить то что в первом окошке, и поставить вместо этого то что во втором?
__________________
Блог
Red Nova вне форума  
 
Непрочитано 22.07.2008, 15:20
#472
VVA

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


Цитата:
Закоментарь ее
Т.е. закоментируй. Ты изучаешь LISP и язык должен знать. В любом языке программирования есть коментарии. В коментариях можно давать пояснения к коду или оставлять предыдущие версии кода
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 22.07.2008, 15:45
#473
Red Nova

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


А да, сорри, не дошло как-то сразу. Поставить символы ";" и за ними поместить
Цитата:
(defun mip-put-hyperlink (ENAME URLDescription)(princ))
Теперь понял, буду пробовать.
__________________
Блог
Red Nova вне форума  
 
Непрочитано 05.08.2008, 13:13
#474
Kostinok

Инженер-электрик
 
Регистрация: 13.10.2007
Калининград
Сообщений: 151


Даже при беглом просмотре дошел только до поста #340... А если мой пост #474....
МУчают сомнения что мой вопрос не прочитают(((
(Надеясь на чудо):
В теме множество лиспов для расчета спецификаций. К сожалению пригодный для себя не нашел((( Думаю если VVA подсилу все о чем вы тут говорили, то моя задача будет куда легче.
У меня на чертеже те же линии и мтексты - которые визуально являются таблицей.
Очень хотелось бы "анализирующий" лисп. Который работал бы по принципу сводных таблиц Excelя.
Представте себе есть данные:
Код:
[Выделить все]
ПВ1       3(1х1,5)       7,0
ПВ1       3(1х2,5)       13,0
ПВ1       5(1х1,5)       26,0
ПВ1       5(1х2,5)       16,0
ВВГ       3х4       20,0
Результат работы программы:
Код:
[Выделить все]
ПВ1       1х1,5       151
ПВ1       1х2,5       119
ВВГ       3х4       20,0
И проанализировав все вырисовывалась бы таблица с этими значениями.
Форма таблицы и пример во вложенном файле.
И более менее понятное ТЗ с принципом расчета)))
Заранее спасибо!
Вложения
Тип файла: dwg
DWG 2004
Пример.dwg (55.3 Кб, 2150 просмотров)
__________________
Можно сопротивляться вторжению армий, вторжению идей сопротивляться невозможно. /В. Гюго/

Последний раз редактировалось Kostinok, 05.08.2008 в 14:42.
Kostinok вне форума  
 
Непрочитано 06.08.2008, 01:26
#475
skkkk


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


Прошу вернуться к первой части темы (о сумме цифр мтекстов), а точнее к лиспу с #422 (страница 22). Подскажите, пожалуйста, можно ли добавить к лиспу функцию, позволяющую вставлять результат в атрибут блока или ячейку таблицы?
skkkk вне форума  
 
Непрочитано 06.08.2008, 12:39
#476
VVA

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


skkkk, В атрибут можно было и лиспом #422. ТОлько выбирать надо сам атрибут
Сейчас можно вставлять в атрибут блока, ячейку таблицы, размер, мтекст, текст. Условие то же. Указавать нужно не блок или таблицу, а атрибут или текст в ячейке.
Код:
[Выделить все]
(defun c:z-calc-text-value (/ value ent obj ss)
  (vl-load-com)
  (princ
    "\nВыберите текстовые объекты среди которых будет произведененна калькуляция"
    ) ;_ princ
  (setq ss (ssget "_:L" '((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
            "."
            ","
            (mip_MTEXT_Unformat (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 (not(TTC_Paste value nil)))
      ) ;_ progn
    ) ;_ if
  (princ)
  ) ;_ defun
(defun mip_MTEXT_Unformat ( Mtext / text Str )
  (setq Text "")
   (while (/= Mtext "")
        (cond
          ((wcmatch (strcase (setq Str (substr Mtext 1 2))) "\\[\\{}]")
            (setq Mtext (substr Mtext 3) Text   (strcat Text Str)))
          ((wcmatch (substr Mtext 1 1) "[{}]")(setq Mtext (substr Mtext 2)))
          ((wcmatch (strcase (setq Str (substr Mtext 1 2))) "\\[LO`~]")
	   (setq Mtext (substr Mtext 3)))
          ((wcmatch (strcase (substr Mtext 1 2)) "\\[ACFHQTW]")
            (setq Mtext (substr Mtext (+ 2 (vl-string-search ";" Mtext)))))
          ((wcmatch (strcase (substr Mtext 1 2)) "\\P")
            (if (or(= " " (substr Text (strlen Text)))
		   (= " " (substr Mtext 3 1)))
               (setq Mtext (substr Mtext 3))
               (setq Mtext (substr Mtext 3) Text (strcat Text " "))))
	  ((wcmatch (strcase (substr Mtext 1 2)) "\\S")
            (setq Str   (substr Mtext 3 (- (vl-string-search ";" Mtext) 2))
                  Text  (strcat Text (vl-string-translate "#^\\" "/^\\" Str))
                  Mtext (substr Mtext (+ 4 (strlen Str)))))
	  (t (setq Text (strcat Text (substr Mtext 1 1)) Mtext (substr Mtext 2)))
	  ))
  Text
  )
(defun TTC_Paste(pasteStr keepText / nslLst vlaObj ret)
(if (setq nslLst(nentsel "\nТекст, атрибут, таблица или размер для вставки <выход> >>"))
(progn (setq ret t)(cond
((and (= 4(length nslLst))
 (= "DIMENSION"(cdr(assoc 0(entget(car(last nslLst))))))); end and
(setq vlaObj (vlax-ename->vla-object (cdr(assoc -1(entget(car(last nslLst)))))))
(setq oldStat (vla-get-Measurement vlaObj))
(if keepText
 (if (= (vla-get-TextOverride vlaObj) "")
 (setq pasteStr (strcat pasteStr (rtos oldStat (vla-get-UnitsFormat vlaObj) (vla-get-PrimaryUnitsPrecision vlaObj))))
 (setq pasteStr (strcat pasteStr (vla-get-TextOverride vlaObj)))))
(if (vl-catch-all-error-p(vl-catch-all-apply 'vla-put-TextOverride(list vlaObj pasteStr)))
  (progn (princ "\n Can't paste. Object may be on locked layer. ") (setq ret nil)))); end condition #1
((and (= 4(length nslLst))
(= "ACAD_TABLE"(cdr(assoc 0(entget(car(last nslLst))))))); end and
(setq vlaObj (vlax-ename->vla-object(car nslLst)))
(if keepText (setq pasteStr (strcat pasteStr (vla-get-TextString vlaobj))))
(if (vl-catch-all-error-p (vl-catch-all-apply 'vla-put-TextString(list vlaObj pasteStr)))
(progn (setq ret nil)(princ "\nError. Can't pase text. "))(entupd (car(last nslLst))))); end condition # 2
((and (= 4(length nslLst))
 (= "INSERT"(cdr(assoc 0(entget(car(last nslLst))))))); end and
 (setq ret nil)
(princ "\nCan't paste to block's DText or MText. ")); end condition #3
((and (= 2(length nslLst))
(member(cdr(assoc 0(entget(car nslLst)))) '("TEXT" "MTEXT" "ATTRIB" "ATTDEF"))); end and
(setq vlaObj (vlax-ename->vla-object(car nslLst)))
(if keepText (setq pasteStr (strcat pasteStr (vla-get-TextString vlaobj))))
(if (vl-catch-all-error-p (vl-catch-all-apply 'vla-put-TextString(list vlaObj pasteStr)))
(progn(princ "\nError. Can't pase text. ")(setq ret nil)))); end condition #4
(T (setq ret nil)(princ "\nCan't paste. Invalid object. ")); end condition #5
); end cond
); end progn
(setq ret t)); end if
  ret
);_TTC_PASTE
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 06.08.2008, 13:28
#477
skkkk


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


VVA, с таблицей порядок, спасибо. А вот с атрибутами не пойму - не работает. Может, я не так указываю как-то? С #422 у меня тоже не выходило в атрибут вставить. Ну вот, во вложении два блока. Сумму текстов надо вставить в прямоугольник-блок. Как?
Вложения
Тип файла: dwg
DWG 2007
Чертеж.dwg (60.4 Кб, 2151 просмотров)
skkkk вне форума  
 
Автор темы   Непрочитано 06.08.2008, 14:29
#478
Red Nova

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


skkkk,
Эх товарищ товарищ. Да где у тебя атрибут то в блоке? Закатал текст в блок, и удивляешься - че это не работает. Введи в редакторе блоков _ATTDEF, появится окно для создания атрибута.
__________________
Блог
Red Nova вне форума  
 
Непрочитано 06.08.2008, 14:41
#479
skkkk


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


Ну я почему-то считал, что текст в блоке - это и есть атрибут. Да, стыдно. Но меня никто не учил, поэтому я не расстраиваюсь. Вот тогда вопрос. Во вложении лисп (копирует тексты), так вот он может скопировать текст в текст, загнанный в блок, как у меня. Как это он делает?? Нельзя ли с #476 также научить? А про атрибуты надо почитать, не очень пока понятно, что там к чему
skkkk вне форума  
 
Автор темы   Непрочитано 06.08.2008, 15:01
#480
Red Nova

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


Тебе мой совет, забудь про текст в блоке в таких случаях (иногда текст в блоке полезен, но не тут). Изучи атрибуты. Это не трудно. Что ты будешь делать если этот же блок надо вставить еще раз, но с другим содержанием текста? Для этого атрибут и нужен.
__________________
Блог
Red Nova вне форума  
Ответ
Вернуться   Форум 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