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

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

Копирование данных для спецификаций из выносок СПДС в таблицу из мтекстов

Ответ
Поиск в этой теме
Непрочитано 23.09.2008, 22:49
Копирование данных для спецификаций из выносок СПДС в таблицу из мтекстов
Red Nova
 
ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Торонто
Регистрация: 23.10.2007
Сообщений: 1,980

Если кто еще не знает, то тут VVA по моей просьбе создал программу для подсчета масс в спецификациях из мтекстов. Программой я очень доволен, все не нарадуюсь. Но как говорится аппетит приходит во время еды. И теперь хотелось бы пойти еще дальше и автоматизировать создание самой спецификации (которую уже потом можно рассчитывать лиспом от VVA). Ведь по большей части на чертеже всегда присутствуют выноски в которых уже есть информация по спецификации, или хотя бы ее часть. Что если одной командой собрать всю информацию из выносок и вписать в шаблон спецификации.
Суть такова.
Я пользуюсь СПДС. Для маркировки позиций использую выноски СПДС. Выноски СПДС имеют две строки, в верхней пишется номер позиции, в нижней данные о профиле.
Предполагаемый лисп должен выбирать все позиционные выноски СПДС имеющиеся в файле (можно и выбрать рамкой часть файла), создавать список из двух столбцов (номер позиции и профиль), затем многократно фильтровать ненужные данные и дублирующие позиции. Полученный список упорядочивается. Затем рамкой выбирается шаблон для спецификации (напомню он из мтекстов), в выбранные строки вписываются данные из упорядоченного списка.

Теперь попробую на конкретном файле объяснить алгоритм более подробно.
Запускаем лисп, создается список с данными из выносок. Затем фильтруем мусор. Для этого надо сперва ввести в лисп пояснение – как выбрать полезные выноски. Дадим определение пригодных для спецификации выносок.
Они должны удовлетворять следующим пунктам.
1. Обе строки выноски содержат информацию.
2. Верхняя строка выноски должна содержать информацию нумерационного характера, нумерация отсчитывается по цифрам и по буквам латинского и русского алфавитов. Можно использовать знак ‘ и “. Допускаемые записи могут иметь такой вид – 1, 2, 3, 4, // а, б, в, г, // a, b, c, d, // 1a, 1b, 1c, // 1, 1’, 1”, 2, 2’ // a1, a2, a3, b, b1, ... (Впрочем для первого приближения можно оставить только 1, 2, 3, 4)
3. Нижняя строка должна начинаться на определенные символы, вот их список
- Знак “-”, слова “Лист” и “Полоса”
- Слово “Труба”, “Тр.” и знак трубы из шрифтов СПДС
- Слово “Уголок” и аналогичные символы из шрифтов СПДС
- Слово “Двутавр” и аналогичные символы из шрифтов СПДС
- Слово “Швеллер” и аналогичные символы из шрифтов СПДС
- Слово “Фланец”, то же “Фл.”
- Стандартный знак диаметра и знак диаметра из шрифтов СПДС
4. Есть и другие критерии, но о них пока не стоит говорить.

Теперь необходимо отсеять дублирующие позиции, но делать это надо так, чтобы отсеять менее информативные выноски. Скажем имеем две выноски первая строка которых имеет тот же номер, а втора строка различается, предположим вотрые строки имеют следующее содержание:
“Тр. Ø89х3.5, L=2500”
“Тр. Ø89х3.5”
Из этих строк выбирается первая, как более информативная, вторая отбрасывается. Если по проще, то для дальнейших действий берем выноску с более длинной второй строкой.

Поскольку информация о профиле вписывается в двух столбцах (Профиль отдельно, длина отдельно) то нам теперь нам надо определится с ними.
Предположим верхняя строка выноски содержит цифру 25. Если нижняя строка выноски не содержит запятых, (на пример “Тр. Ø89х3.5”) то считаем что выноска не несет информацию о длине профиля, тогда в списке соответствующая строка записывается как
(25, Тр. Ø89х3.5, -). Если же запятая есть (на пример “Тр. 89х3.5, L=2500”) То считаем что выноска несет информацию о длине профиля, тогда в списке соответствующая строка записывается как (25, Тр. 89х3.5, L=2500). Если выноска содержит две и более запятых, (на пример “Тр. Ø89х3.5, L=2500, шаг 200”) то отбрасываем информацию идущую после второй запятой.
Далее упорядочиваем список (по номерам позиций).
Если все прошло как планировалось, то применительно к файлу примера список будет такой.
(1, -10х100x100, -)
(2, Тр. Ø89х3.5, L=2500)
(3, “знак уголка шрифта СПДС”75х5, L=800)
(4, “знак двутавра шрифта СПДС”20, -)
(5, “знак швеллера шрифта СПДС”12, L=960)
(6, Ø12 А500c, ΣL=24000)
(7, Ø20 А500c, L=980)

В спецификации есть также столбик с ГОСТ-ом. Чтобы он вписывался автоматически для каждого профиля надо заранее определится с ГОСТ-ом, и записать его в лисп. Так в нашем примере нужно записать следующие госты
Если обозначение профиля начинается на символ “-”, слово “Лист” то это соответствует ГОСТу “ГОСТ 19903-74”
Если обозначение профиля начинается на слова “Труба”или “Тр.” то это соответствует ГОСТу “ГОСТ 10704-91”
Если обозначение профиля начинается на cлово “Уголок” или аналогичные символы из шрифтов СПДС то это соответствует ГОСТу “ГОСТ 8509-93”
Если обозначение профиля начинается на cлово “Двутавр” или аналогичные символы из шрифтов СПДС
то это соответствует ГОСТу “ГОСТ 8239-89”
Если обозначение профиля начинается на слово “Швеллер” или аналогичные символы из шрифтов СПДС
то это соответствует “ГОСТ 8240-97”
Если обозначение профиля начинается на стандартный знак диаметра и знак диаметра из шрифтов СПДС то это соответствует ГОСТу “ГОСТ 5781-82”

Итак добавив ГОСТы к спискам они должны стать такими:
(ГОСТ 19903-74, 1, -10х100x100, -)
(ГОСТ 10704-91, 2, Тр. Ø89х3.5, L=2500)
(ГОСТ 8509-93, 3, “знак уголка шрифта СПДС”75х5, L=800)
(ГОСТ 8239-89, 4, “знак двутавра шрифта СПДС”20, -)
(ГОСТ 8240-97, 5, “знак швеллера шрифта СПДС”12, L=960)
(ГОСТ 5781-82, 6, Ø12 А500c, ΣL=24000)
(ГОСТ 5781-82, 7, Ø20 А500c, L=980)

Формирование списка законченно. Теперь нужно рамкой отметить шаблон спецификации, в которой 4 столбца и n-ное количество строк. Данные их списка вписываются в мтексы спецификации как указанно в файле примера. Если строк выбрано больше чем у списка, то в мтексты лишних строк вписываются символы ###, если строк выбрано меньше чем у списка, то выходит сообщение об ошибке.

Ну вот и все. Больно длинно у меня получилось для первых объяснений. Если вы дошли до этого предложения, то у вас железное терпение. Надеюсь что кому-то эта белиберда покажется интересной.

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


Код:
[Выделить все]
(defun c:get-notes-activex (/ adoc lst)
;; Через ActiveX
  (vl-load-com)
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-StartUndoMark
  (vlax-for ent (vla-get-modelspace adoc)
    (if (= (vla-get-objectname ent) "mcsDbObjectNotePosition")
      (setq lst (cons ent lst))
      ) ;_ end of if
    ) ;_ end of vlax-for
  ;; Теперь делай со списком чего хотишь
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun

(defun c:get-notes-ent (/ adoc lst _dwgru-conv-pickset-to-list)
;; Через ent*

  (defun _dwgru-conv-pickset-to-list (value / tab item)
    (repeat (setq tab  nil
                  item (sslength value)
                  ) ;_ end setq
      (setq tab (cons (ssname value (setq item (1- item))) tab))
      ) ;_ end repeat
    ) ;_ end defun

  (vl-load-com)
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-StartUndoMark
  (setq lst (vl-remove-if-not
              '(lambda (x) (= (cdr (assoc 0 (entget x))) "spdsNotePosition"))
              (_dwgru-conv-pickset-to-list (ssget "_X"))
              ) ;_ end of vl-remove-if-not
        ) ;_ end of setq
  ;; Теперь делай со списком чего хотишь
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun

Вложения
Тип файла: dwg
DWG 2004
Выноски СПДС.dwg (76.0 Кб, 10254 просмотров)

__________________
Блог
Просмотров: 50041
 
Непрочитано 29.10.2008, 07:07
#121
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,143


CB, этот лисп очень хороший! я сомтрю тут не всефорумчане учавствуют в разговоре, но все следят за изменениями и в курсе дела, могу показать мое ТЗ, если конечно я вовремя...
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Автор темы   Непрочитано 29.10.2008, 09:56
#122
Red Nova

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


dextron3,
Цитата:
а куда подевались мои решеточки?
Какие решетки?
DEM,
Цитата:
все как то через одно место делается.
Может и так. Я не против того чтобы программа приняла более достойный вид. Так что, если хочешь, давай будем формулировать новое ТЗ, ты первый. СВ вроде не против все переделать.
ShaggyDoc,
Цитата:
Практического значения ноль, null или nil
Не согласен. Нужно учесть что ТЗ я сформулировал учитывая нужды нашего КБ. Конечно же это не для всех универсально. Но тут без помощи других участников форума не справиться. У нас программа уже используется, и все довольны. Так что практического значения уже не ноль.
__________________
Блог
Red Nova вне форума  
 
Непрочитано 29.10.2008, 10:05
#123
Рyslan


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


а где сам лисп? никак не могу его найти среди ваших постов
Рyslan вне форума  
 
Непрочитано 29.10.2008, 10:11
#124
DEM

YngIngKllr
 
Регистрация: 29.03.2005
СПб
Сообщений: 12,968


Red Nova
Занимаюсь своей программкой думаю о структуре и связи данных.
Правда часть моих пожеланий Яков Коренев пообещал в следующем релизе СПДС-ки учесть.
Связь данных можно осуществить и с помощь данного лиспа, только проблема в том что обозначения позиций на чертеже, Я делаю нумерацией, а не как в вашем случае описывая деталь грубо говоря.
__________________
Работаю за еду.
Working for food.
Für Essen arbeiten.
العمل من أجل الغذاء
Працую за їжу.
DEM вне форума  
 
Непрочитано 29.10.2008, 11:23
#125
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


Цитата:
практического значения уже не ноль
Я же писал "...null или nil". А null и nil это не ноль.
ShaggyDoc вне форума  
 
Непрочитано 29.10.2008, 12:04
#126
Рyslan


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


так где лисп то? дайте посмотреть то
Рyslan вне форума  
 
Автор темы   Непрочитано 29.10.2008, 13:21
#127
Red Nova

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


Рyslan, #115 + Это и Это
ShaggyDoc, Издеваемся... ну как не Ай Ай Ай.
DEM, А что конкретнее планируют ввести разработчики СПДС в следующем релизе?
__________________
Блог
Red Nova вне форума  
 
Непрочитано 29.10.2008, 14:40
#128
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


Цитата:
ShaggyDoc, Издеваемся... ну как не Ай Ай Ай.
Ага. Пытаетесь решить задачу, чтобы в спецификацию попадали правильные данные. И придумали, что их надо из выносок копировать. А в выноски может попадать черт-те что, особенно если dextron3 возьмется. И пытаетесь программно перебирать все варианты, на которые способна "обезьяна с гранатой". Их будет бесконечное количество.

А надо делать, чтобы вообще ввести можно было только правильные данные.

Последний раз редактировалось ShaggyDoc, 29.10.2008 в 20:34. Причина: Убрал неправильное "ожирнение"
ShaggyDoc вне форума  
 
Непрочитано 29.10.2008, 15:14
#129
Рyslan


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


Red Nova
А одного этого нет? Выложи готовый вариант, которым сам пользуешься и описание что делает лисп, если не трудно
Рyslan вне форума  
 
Автор темы   Непрочитано 29.10.2008, 15:24
#130
Red Nova

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


ShaggyDoc, Похоже вы не очень внимательно просмотрели лисп. Там присутствует многократная фильтрация лишней информации. Как раз чтобы "черт-те что" туда не попадало. Честно говоря не понимаю вашего недоумения. Этот лисп лично для меня (и не только) очень удобен. И я не претендую на то чтобы программа стала эталонной.
__________________
Блог
Red Nova вне форума  
 
Автор темы   Непрочитано 29.10.2008, 15:34
#131
Red Nova

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


Рyslan, Я дал 3 ссылки. Сохрани коды как отдельные lsp файлы и загрузи. Описание работы на #52
__________________
Блог
Red Nova вне форума  
 
Непрочитано 29.10.2008, 19:13
#132
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,143


Red Nova, на счет болта L= не желательно бы,

хотябы прочерк вместо длины ставило, как в пластинах...
Миниатюры
Нажмите на изображение для увеличения
Название: Snap1.jpg
Просмотров: 106
Размер:	11.1 Кб
ID:	11651  
__________________
инженер проектировшик с опттом программа авто гад образование высшие

Последний раз редактировалось dextron3, 29.10.2008 в 19:24.
dextron3 вне форума  
 
Непрочитано 29.10.2008, 19:54
#133
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,143


Red Nova,

Принимай обновлениия:

Код:
[Выделить все]
"Анк.Болт*,ПВ1*,Сетка*,Чечев.*,Ромб.*,Шайба*,Гайка*,Болт*,\\U+E72E*,Труба*,Тр.*,Лист*,Полоса*,\\U+E720*,Уголок*,\\U+E725*,Швеллер*,\\U+E729*,Двутавр*,Фланец*,Фл.*,-*,%%c*,\\U+E712*,#%%c*,# %%c*,##%%c*,## %%c*,#\\U+E712*,# \\U+E712*,##\\U+E712*,## \\U+E712*"

Код:
[Выделить все]
(list (list "Лист -" "Лист-" "Фл")
                   (list "Лист чечевица" "Лист ромб")
                   (list "-")
                   (list "Полоса")
                   (list "Уголок" "\\U+E720")
                   (list "\\U+E72E")
                   (list "Тр")
		   (list "Двутавр*#*#[БКШ]" "\\U+E729*#*#[БКШ]")
		   (list "Двутавр*#*#[М]" "\\U+E729*#*#[М]")
                   (list "Двутавр" "\\U+E729")
                   (list "Швеллер" "\\U+E725")
                   (list "%%c" "\\U+E712")
                   (list "Анк.Болт")
                   (list "Болт")
                   (list "Гайка")
                   (list "Шайба")
                   (list "Ромб.")
                   (list "Чечев.")
                   (list "Сетка")
                   (list "ПВ1")

             ) ;_ end of list
             (list "ГОСТ 19903-74"
                   "ГОСТ 8568-77"
                   (list "ГОСТ 19903-74" "ГОСТ 103-76")
                   "ГОСТ 103-76"
                   (list "ГОСТ 8509-93" "ГОСТ 8510-86")
                   "ГОСТ 30245-03"
                   "ГОСТ 10704-91"
		   "СТО АСЧМ 20-93"
                   "ГОСТ 19425-74" 
                   "ГОСТ 8239-89"
                   "ГОСТ 8240-97"
                   "ГОСТ 5781-82"
                   "ГОСТ 28778-90"
                   "ГОСТ 7798-703"
                   "ГОСТ 5915-70"
                   "ГОСТ 11371-78"
                   "ГОСТ 8568-77"
                   "ГОСТ 8568-77"
                   "ГОСТ 5336-80"
                   "ТУ 36.26.11-5-89"


             ) ;_ end of list
Не работает только Анк.Болт, жду объяснения
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Непрочитано 29.10.2008, 21:35
#134
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,143


А возможно просто сделать такой лисп + к нему текстовый файл

тоесть СПДС ная выноска, делиться на три как бы составляющих

1. Позиция
2. Надпись
3. Длина, любое наименование, разделение происходит при помощи ЗАПЯТОЙ,

в текстовом файле запись к примеру

Ф______ГОСТ такойто
Швеллер_______ГОСТ такойто

лисп проверяет если есть в текстовом файле сочетание символов из выноски то соответсвующий гост вписывает в столбец для госта, если не находит то вписывает прочерк,

так бы был универсальный, а то сейчас сложно наполнять

Буду ждать помощи Red Nova, СВ и VVA

заранее балгодарен
Миниатюры
Нажмите на изображение для увеличения
Название: Snap2.jpg
Просмотров: 109
Размер:	35.2 Кб
ID:	11661  
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Непрочитано 29.10.2008, 22:38
#135
DEM

YngIngKllr
 
Регистрация: 29.03.2005
СПб
Сообщений: 12,968


dextron3
Че дурью маятся зачем повторять то что дано уже в спецификации.
Можно же просто использовать маркеры, там сделать не видимые свойства, и будет у тебя просто позиция на чертеже.
Короче ща времени нету, чуть позже поставлю 5-ку СПДС и разберу все по полочкам.
__________________
Работаю за еду.
Working for food.
Für Essen arbeiten.
العمل من أجل الغذاء
Працую за їжу.
DEM вне форума  
 
Автор темы   Непрочитано 30.10.2008, 11:27
#136
Red Nova

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


DEM, Уже 5-я вышла? Может действительно там все уже по спецификациям тип-топ. Надо посмотреть...
__________________
Блог
Red Nova вне форума  
 
Непрочитано 31.10.2008, 22:48
#137
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,143


Red Nova, вроде почти подогнал под себя не могу внедрить свое условие:

Код:
[Выделить все]
(if (wcmatch (cadr x) "\U+E722\U+E722\U+E722*")
                  (append x '("(м.кв.)"))
                  (append x '("L="))
                ) ;_ end of if
писалось только (м.кв.), а L= игнорировалось а не дублировалось

как это сделать?
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Автор темы   Непрочитано 31.10.2008, 23:00
#138
Red Nova

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


Хм. Нашел кого спрашивать
__________________
Блог
Red Nova вне форума  
 
Непрочитано 31.10.2008, 23:03
#139
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,143


Я все понял!!!!!!!!!

Код:
[Выделить все]
(if (wcmatch (cadr x) "-*,Лист*,Фл*,Болт*,Гайка*,Шайба*")
                  (append x '("-"))
                  (append x '("(м.кв.)"))


Red Nova, я сделал такое условие если нет буквы L в выноске и это соответсвенно не -*,Лист*,Фл*,Болт*,Гайка*,Шайба*, то тогда будет проставляться (м.кв.), но проблема что хочется теперь п.м. вставить
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Непрочитано 31.10.2008, 23:09
#140
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,143


но приходится теперь в соновной спеке м.п. выражать так:
Миниатюры
Нажмите на изображение для увеличения
Название: Snap3.jpg
Просмотров: 102
Размер:	47.6 Кб
ID:	11771  
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Копирование данных для спецификаций из выносок СПДС в таблицу из мтекстов

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сейсмозащита и сейсмоизоляция существующих, построенных зд. IANationalInformAgentstvo Прочее. Архитектура и строительство 216 20.01.2015 16:51
Предложения по расчетным моделям сооружений aldt Расчетные программы 8 06.07.2009 17:53
Программа для разработки спецификаций в MS Excel Бриг Прочее. Программное обеспечение 5 27.09.2007 08:38
Создание форматки для СПДС Владимир М Программирование 2 22.09.2006 23:17
Программы для разработки спецификаций assenizator AutoCAD 6 04.02.2005 13:34