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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > LISP. Как определить ошибочные поля (####) в AutoCAD?

LISP. Как определить ошибочные поля (####) в AutoCAD?

Ответ
Поиск в этой теме
Непрочитано 19.08.2015, 13:41
LISP. Как определить ошибочные поля (####) в AutoCAD?
skkkk
 
Регистрация: 20.03.2008
Сообщений: 2,653

Возник вопрос:
Цитата:
Сообщение от skkkk Посмотреть сообщение
Подскажите, пожалуйста, если кто знает, как можно проверить, не просматривая весь чертеж на наличие "решеток", все ли поля "целы"? То есть, не удалили ли случайно объекты, на которые они ссылаются? Как-то, на мой взгляд, не продуман Автодеском этот момент. Можно было бы и предупреждение добавить при удалении таких объектов.
Пробовал поиск в чертеже по символу "#" с отключенной галочкой "Подстановочные знаки" - ищет решетки, только если преобразовать поле в текст. Полагаю, нужно будет писать программу для маркировки "осиротевших" полей, но может, есть штатный функционал, о котором я не знаю?
Поскольку штатный функционал такого не позволяет, решено продолжить обсуждение здесь. Код писать не прошу - сам с усам, - прошу заинтересованных и знающих лиц дать оценку алгоритма и внести свои мысли и предложения на этот счет. (Удивляюсь, как до сих пор никого этот вопрос не озадачил, даже на англоязычных форумах ничего не смог найти - может, плохо искал?)

Думаю, алгоритм должен быть примерно таким.
1. Сканируем весь чертеж на предмет объектов с полем. Тут думаю, можно воспользоваться частями уже имеющихся в сети программ, которые преобразовывают поле в текст, например, от VVA. Далее обрабатываем каждый объект по очереди.
2. Получаем текстовое представление объекта. Это самый вроде, простой вариант, но не самый правильный, на мой взгляд, поскольку решетки там могут быть и сами как таковые. Более правильным мне кажется извлекать из кода поля ID объекта и проверять наличие этого объекта на чертеже. ID, конечно меняется от сеанса к сеансу, но, насколько я знаю, в течение сеанса он постоянен, и нам этого достаточно.
3. В зависимости от реализации п. 2, собираем все объекты с порушенными полями, и маркируем их.

Какие есть мысли, уважаемые форумчане?

Добавлено:

Решение в #20
Как всегда, спасибо Алексею. Не успел я начать писать код, как он уже предоставил решение.

Вариант с диалоговым окном выбора нужных вкладок (модели или листа) в #26. Выбрать несколько листов можно, если зажать при выборе Ctrl или Shift. Спасибо VVA.

Последний раз редактировалось skkkk, 08.04.2016 в 11:07.
Просмотров: 15591
 
Автор темы   Непрочитано 25.08.2015, 15:24
#21
skkkk


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


По всем пяти пунктам из #11 - полет отличный. Уже проверил с два десятка файлов - с полсотни где-то незамеченных решеток были обнаружены. Бумаги сэкономилось просто уйма. Как всегда, спасибо, Алексей.
skkkk вне форума  
 
Непрочитано 25.11.2015, 12:17
#22
ArchPavel

кончающий инженер-гидротехник
 
Регистрация: 17.12.2012
Сообщений: 67


Применил скрипт из #20 к своему файлу.
В файле в таблице сведены ТЭП по квартире - в ячейке простые суммы из полей (по принципу "=FIELD+FIELD+FIELD". Каждое поле - одна полилиния. Для эксперимента одна полилиния на чертеже была удалена. В таблице сумма уменьшилась, но не стала отображаться как решетка (из-за чего и полез в Форум). Исчезновение полилинии видно только когда заходишь в ячейку и видишь всю цепочку полей-участников - на месте пропавшей полилинии красуется решетка. Но, как и говорил выше, сумма не становится решеткой, число уменьшается но остается числом.
Скрипт не смог отловить эту пропажу.

Вопрос сдвоенный - есть ли возможность заставить Автокад отображать сумму решеткой, если один из членов расчета - решетка? И возможно ли в скрипте учесть эту специфику ячеек таблиц?
ArchPavel вне форума  
 
Непрочитано 26.11.2015, 12:29
#23
shartal


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


Корректно отлавливает поля во всех типах объектов только код из поста 20. Но он проверяет все листы. Это очень не удобно. В файле есть несколько листов, часть из них еще не входит в подшивку, а штамп с полями уже стоит (заполняется сам при добавлении листа в подшивку). Можно добавить версию, которая ищет поля только в текущем пространстве?
shartal вне форума  
 
Автор темы   Непрочитано 26.11.2015, 16:04
#24
skkkk


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


Цитата:
Сообщение от ArchPavel Посмотреть сообщение
Исчезновение полилинии видно только когда заходишь в ячейку и видишь всю цепочку полей-участников - на месте пропавшей полилинии красуется решетка. Но, как и говорил выше, сумма не становится решеткой, число уменьшается но остается числом.
Сам не так давно столкнулся с подобным нюансом. Заметил что цифры в некоторых полях какие-то неадекватные. Подтверждаю, что если конечное поле состоит из суммы полей и содержимое одного из слагаемых отображается в формуле конечного поля в виде решеток, то это слагаемое принимается за нуль и сумма считается без его учета. И пользователь (а хуже, когда некто проверяющий этого пользователя, а еще хуже, когда госпожа Физика) видит на чертеже вместо ошибки (####) эту неправильную с его точки зрения, но правильную с точки зрения AutoCAD'а цифру и очень удивляется.
Как это исправить - пока ума не приложу. Можно ли программно докопаться до слагаемых этого поля?
skkkk вне форума  
 
Непрочитано 26.11.2015, 17:04
#25
Кулик Алексей aka kpblc
Moderator

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


Теоретически можно: получаешь FieldCode, парсишь его на предмет ObjectId (которые, насколько я помню, потребуется преобразовывать), по ним получаешь указатели на объекты - и собираешь с них соответствующую информацию.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 27.11.2015, 09:25
1 | #26
VVA

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


Цитата:
Сообщение от shartal Посмотреть сообщение
Корректно отлавливает поля во всех типах объектов только код из поста 20. Но он проверяет все листы.
Добавил диалог выбора листов
Вложения
Тип файла: lsp CheckFields 0.0.4.LSP (28.5 Кб, 72 просмотров)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 27.11.2015, 15:04
#27
Эдуард

строительство
 
Регистрация: 16.01.2004
Петербург
Сообщений: 165
<phrase 1=


Решил все таки покопаться в словаре как было предложено выше. Вроде получается проще. У поля битого объекта изменены коды 94,95,96
Код:
[Выделить все]
 
(defun bad_field ()
  (vl-remove-if-not
    '(lambda (x)
       (and
	 (= (car x) 330)
	 (= (cdr (assoc 0 (entget (cdr x)))) "FIELD")
	 (= (cdr (assoc 1 (entget (cdr x)))) "AcObjProp")
	 (> (cdr (assoc 96 (entget (cdr x)))) 0)
       )
     )

    (dictsearch (namedobjdict) "ACAD_FIELDLIST")

  )
)
Эдуард вне форума  
 
Непрочитано 02.12.2015, 09:53
#28
ArchPavel

кончающий инженер-гидротехник
 
Регистрация: 17.12.2012
Сообщений: 67


Скажите кто знает, может хотя бы в 2015-2016 версиях этот глюк с таблицами исправили?
ArchPavel вне форума  
 
Непрочитано 02.12.2015, 10:12
#29
Кулик Алексей aka kpblc
Moderator

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


Какой "этот"?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 02.12.2015, 10:29
#30
ArchPavel

кончающий инженер-гидротехник
 
Регистрация: 17.12.2012
Сообщений: 67


Вопрос в #22
ArchPavel вне форума  
 
Непрочитано 02.12.2015, 11:16
#31
Кулик Алексей aka kpblc
Moderator

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


Ну тогда меняй код скрипта так, как тебе надо. Вопрос не к штатному функционалу AutoCAD
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 02.12.2015, 13:54
#32
ArchPavel

кончающий инженер-гидротехник
 
Регистрация: 17.12.2012
Сообщений: 67


то есть в 15/16 версиях сумма полей "правильных" и "решетчатых" все также пишется числом, не решеткой? Не понимаю логики Autodesk
ArchPavel вне форума  
 
Непрочитано 02.12.2015, 14:44
#33
Кулик Алексей aka kpblc
Moderator

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


AutoCAD 2015: при наличии в формуле ошибочного поля результат выводится как ####. Только что специально проверил.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 02.12.2015, 14:53
#34
ArchPavel

кончающий инженер-гидротехник
 
Регистрация: 17.12.2012
Сообщений: 67


Спасибо большое
ArchPavel вне форума  
 
Непрочитано 02.12.2015, 15:14
#35
kacugu

начинающий инженер-гидротехник
 
Регистрация: 18.04.2010
Санкт-Петербург
Сообщений: 893


Autocad 2015 rus sp2. Тоже самое, что и в #22.
Вложения
Тип файла: dwg
DWG 2013
Field in table.dwg (36.6 Кб, 439 просмотров)

Последний раз редактировалось kacugu, 02.12.2015 в 15:30. Причина: добавил файл
kacugu вне форума  
 
Непрочитано 02.12.2015, 15:16
#36
ArchPavel

кончающий инженер-гидротехник
 
Регистрация: 17.12.2012
Сообщений: 67


Вот жеж засада (
ArchPavel вне форума  
 
Непрочитано 02.12.2015, 16:04
#37
kacugu

начинающий инженер-гидротехник
 
Регистрация: 18.04.2010
Санкт-Петербург
Сообщений: 893


А проверка таблиц на наличие #### не планируете добавить?
kacugu вне форума  
 
Непрочитано 02.12.2015, 16:10
#38
Кулик Алексей aka kpblc
Moderator

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


Кому вопрос адресован?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 02.12.2015, 16:17
#39
kacugu

начинающий инженер-гидротехник
 
Регистрация: 18.04.2010
Санкт-Петербург
Сообщений: 893


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Кому вопрос адресован?
Скорее мысль в слух
kacugu вне форума  
 
Непрочитано 07.04.2016, 15:01
#40
shartal


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


Подскажите господа, чтобы такое добавить в код, чтобы проверял решетки только в модели?
shartal вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > LISP. Как определить ошибочные поля (####) в AutoCAD?

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
AutoCAD 2008, Функция "Последние Файлы" никак не хочет работать Fredyk AutoCAD 4 05.07.2012 08:35
Свежие книги по AutoCAD. Какая лучше? Marsikus Поиск литературы, чертежей, моделей и прочих материалов 10 28.01.2012 16:55
Правило формирование записей в реестре об установленных обновлениях для AutoCAD и его вертикальных решений. hwd Программирование 8 30.09.2010 15:07
Где в реестре хранится информация о том, что в системе когда-то был установлен AutoCAD? Archeo AutoCAD 12 14.10.2009 15:24
Что нового в AutoCAD 2005 ilka_t AutoCAD 40 19.05.2004 16:48