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

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Динамические блоки > Дублируются полилинии, блоки, атрибуты в динамических блоках. Как избежать?

Дублируются полилинии, блоки, атрибуты в динамических блоках. Как избежать?

Ответ
Поиск в этой теме
Непрочитано 26.12.2018, 09:05
Дублируются полилинии, блоки, атрибуты в динамических блоках. Как избежать?
Nemyheim
 
Регистрация: 21.11.2018
Сообщений: 14

Здравствуйте!
Думаю, что проблема не нова и может быть есть какое-то решение:
Много работаю с построением сложных динамических блоков и иногда сталкиваюсь с казусом:
Объекты в блоке полностью дублируются. Иногда х2, иногда х3, но бывало и х4 однажды.
Дублируются полилинии, отрезки, атрибуты. Приходится чистить вручную, т.к. с коммандой подч. удаляется много нужного. А именно: могут удалиться линии, занятые в растяжении, перемещении, а дубли остаться. Кроме того в самом блоке предусмотрены одинаковые объекты, расположенные в разных слоях друг под другом. Копии тоже иногда удаляются.

Собственно сам вопрос: каких действий следует избегать, чтобы не сталкиваться с такой проблемой?
Для себя решение нашел пока только одно: пблок на диск после каждого редактирования.
Просмотров: 13309
 
Непрочитано 01.06.2020, 18:57
#21
Сергей812


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


Цитата:
Сообщение от kilovad Посмотреть сообщение
подскажите, чем пройти? где посмотреть это хэндл?
программно, 5 группа DXF, если не ошибаюсь.
Сергей812 вне форума  
 
Непрочитано 01.06.2020, 19:00
#22
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от kilovad Посмотреть сообщение
Да, СПДС включен по умолчанию. Надеюсь его можно без труда отключить.
Чей СПДС-то?
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 01.06.2020, 19:16
#23
Сергей812


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Чей СПДС-то?
Цитата:
Сообщение от kilovad Посмотреть сообщение
А вот после открытия чистого файла без шрифтов в автокаде с СПДС от Адтодеск,
все он...)
Сергей812 вне форума  
 
Непрочитано 01.06.2020, 22:31
#24
skkkk


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


Цитата:
Сообщение от kilovad Посмотреть сообщение
подскажите, чем пройти? где посмотреть это хэндл?
В редакторе блоков запустить из командной строки код:
Код:
[Выделить все]
(vlax-dump-object (vlax-ename->vla-object (car (entsel))))
На запрос объекта указать атрибут. В командную строку вывалится перечень свойств указанного объекта. Среди них есть Handle
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
прибить те - которые с большим хэндлом
Осталось понять, какие из них с большим, а какие - с меньшим
Этот "хэндл" - что-то вроде уникального номера объекта, представленный в шестнадцатеричной (HEX) системе. Чтобы сравнить, нужно перевести в десятичную (DEC), например, тут.
Хотя, может, есть и более простой способ, но я его не знаю. Вот например, что больше: 70FB2A или 70FB31
skkkk на форуме  
 
Непрочитано 01.06.2020, 22:57
#25
Сергей812


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


Цитата:
Сообщение от skkkk Посмотреть сообщение
Осталось понять, какие из них с большим, а какие - с меньшим
Этот "хэндл" - что-то вроде уникального номера объекта, представленный в шестнадцатеричной (HEX) системе. Чтобы сравнить, нужно перевести в десятичную (DEC), например, тут.
Хотя, может, есть и более простой способ, но я его не знаю. Вот например, что больше: 70FB2A или 70FB31
вообще то разве в строковом представлении нельзя сразу сравнивать, как выдает хэндл акад в лиспе/vba?) Функция сравнения дойдет до 5 символа, и там отработает. Буквенные коды больше числовых, поэтому и там должно корректно отработать.
Сергей812 вне форума  
 
Непрочитано 02.06.2020, 00:55
#26
skkkk


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
вообще то разве в строковом представлении нельзя сразу сравнивать, как выдает хэндл акад в лиспе/vba?
Посмотрел описание функций сравнения - действительно, сравнивают строки, и судя по всему, именно так, как нужно в данном случае. Тогда можно вот так:
Код:
[Выделить все]
 пока удалил с учетом замечания Сергея ниже

Последний раз редактировалось skkkk, 02.06.2020 в 02:01.
skkkk на форуме  
 
Непрочитано 02.06.2020, 01:43
#27
Сергей812


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
вообще то разве в строковом представлении нельзя сразу сравнивать, как выдает хэндл акад в лиспе/vba?) Функция сравнения дойдет до 5 символа, и там отработает. Буквенные коды больше числовых, поэтому и там должно корректно отработать.
только это можно делать при одинаковой длине строки-числа, тогда как в DXF 5-группа - до 16 символов. Т.е. сначала сравнивать по длине строки

strlen(h1) < strlen(h2) -> h1 был создан ранее
strlen(h1) > strlen(h2) -> h2 был создан ранее
strlen(h1) = strlen(h2) -> тогда уже переходить к сравнению строк
Сергей812 вне форума  
 
Непрочитано 02.06.2020, 19:34
#28
skkkk


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
strlen(h1) < strlen(h2) -> h1 был создан ранее
strlen(h1) > strlen(h2) -> h2 был создан ранее
strlen(h1) = strlen(h2) -> тогда уже переходить к сравнению строк
Вот написал код по данному алгоритму. Добавил предварительное сравнение длины хэндлов. В командной строке должен показать, какой из двух выбранных примитивов новее.

Код:
[Выделить все]
 ;;; Функция сравнения "возраста" двух объектов.
;;; "Моложе" тот объект, хэндл которого длиннее (больше символов),
;;; а при одинаковом количестве символов "моложе" тот, чей хэндл больше по абсолютному значению
(defun C:HC () (handles_compare))
(defun handles_compare ( / entlist1 entlist2 h1 h2)
	(setq entlist1 (entsel "\nПервый объект:"))
	(if entlist1 (setq entlist2 (entsel "\nВторой объект:")))
	(if entlist2
		(setq h1 (cdr (assoc 5 (entget (car entlist1))))
			  h2 (cdr (assoc 5 (entget (car entlist2))))
		)
	)
	(princ "\n---------------")(princ)
	(if	(and h1 h2)
		(cond 
		  (	(> (strlen h1) (strlen h2))
			(princ "\nПервый новее.")
		  )
		  (	(< (strlen h1) (strlen h2))
			(princ "\nВторой новее.")
		  )
		  (	(and (= (strlen h1) (strlen h2)) (> h1 h2))
			(princ "\nПервый новее.")
		  )
		  (	(and (= (strlen h1) (strlen h2)) (< h1 h2))
			(princ "\nВторой новее.")
		  )
		  (	(= h1 h2)
			(princ "\nОдин объект выбран два раза.")
		  )
		)
	)
	(princ)
)
(princ "\nC:HC")
(princ)
skkkk на форуме  
 
Непрочитано 05.04.2021, 10:26
#29
KOS34


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


Попробуйте команду "ПОДЧИСТИТЬ"
KOS34 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Динамические блоки > Дублируются полилинии, блоки, атрибуты в динамических блоках. Как избежать?

Система Техэксперт дает уверенность в правильности и эффективности принимаемых инженерных решений!
Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сбрасываются атрибуты блока при копировании valerik88 AutoCAD 14 13.05.2021 12:31
Прошу помощи с зависимостями в динамических блоках zenija2007 Динамические блоки 9 26.09.2018 09:10
Потеря связи "полей" ("field") в динамических блоках. zenon Динамические блоки 19 07.12.2015 13:06
Динамические блоки при копировании перестают быть динамическими. *Voland* Динамические блоки 11 04.07.2012 10:51
Как добавить атрибуты в динамический блок? Archeo Динамические блоки 20 17.11.2006 11:30