в том числе и блоки внутри других блоковА тут нужна рекурсия
Ты таким образом не проходишься по ModelSpace и PaperSpace и не меняешь слои примитивам, которые непосредственно в них.Не понял - почему тогда меняется слой у линий внутри блока, то есть команда отрабатывает, а не меняется лишь у самого блока? Ведь если я вообще не прохожу по содержимому Modelspace. то как тогда она отрабатывает?
Потому что ты до сих пор не видишь разницу между описанием блока (BlockTableRecord) и вставкой блока (BlockReference). Тебе кроме того, что поменять слой внутри BlockTableRecord нужно еще и поменять слой у BlockReference. В Панели свойств ты видишь BlockReference и соответственно его слой.Ты таким образом не проходишься по ModelSpace и PaperSpace и не меняешь слои примитивам, которые непосредственно в них.Не понял - почему тогда меняется слой у линий внутри блока, то есть команда отрабатывает, а не меняется лишь у самого блока? Ведь если я вообще не прохожу по содержимому Modelspace. то как тогда она отрабатывает?
if ( btr.IsFromExternalReference || btr.IsLayout )Цель этой проверки была исключить из обработки Layout и внешние ссылки. Выходит я не так это реализовал?
Не так. Внешние ссылки тебе действительно нужно пропустить, а вот проверку btr.IsLayout нужно убрать.if ( btr.IsFromExternalReference || btr.IsLayout )Цель этой проверки была исключить из обработки Layout и внешние ссылки. Выходит я не так это реализовал?
Потому что ты до сих пор не видишь разницу между описанием блока (BlockTableRecord) и вставкой блока (BlockReference). Тебе кроме того, что поменять слой внутри BlockTableRecord нужно еще и поменять слой у BlockReference. В Панели свойств ты видишь BlockReference и соответственно его слой.Если я правильно понял BlockReference наследник Entity, почему тогда его не обрабатывает этот код:
убрать проверку на btr.IsLayout.А если мне нужно обработать только содержимое ModelSpace не трогая пространство листа?
Потому что он у тебя в Модели (или Листе). А ты в него не входишь из-за проверки на btr.IsLayoutПотому что ты до сих пор не видишь разницу между описанием блока (BlockTableRecord) и вставкой блока (BlockReference). Тебе кроме того, что поменять слой внутри BlockTableRecord нужно еще и поменять слой у BlockReference. В Панели свойств ты видишь BlockReference и соответственно его слой.Если я правильно понял BlockReference наследник Entity, почему тогда его не обрабатывает этот код:Код - C# [Выбрать]
foreach ( ObjectId id in btr ) { Entity ent = (Entity) tr.GetObject(id, OpenMode.ForWrite); if ( ent.Layer != desiredLayer && ent.Layer.Contains(pattern) ) { ent.Layer = desiredLayer; } }
А если у тебя блок вставлен в пространство листа? Ты же у него внутри слои поменял.убрать проверку на btr.IsLayout.А если мне нужно обработать только содержимое ModelSpace не трогая пространство листа?
внутри BlockTableRecord могут быть не только EntityЯ и не подумал об этом. А на что можно наткнуться?
Всякие объекты, связанные с динамическими блоками - они не примитивы (т.е. не наследники Entity, а наследники DBObject).внутри BlockTableRecord могут быть не только EntityЯ и не подумал об этом. А на что можно наткнуться?
А если у тебя блок вставлен в пространство листа? Ты же у него внутри слои поменял.В моем случае это исключено - там только форматки в нулевом слое, видовые окна и все. Любая другая геометрия там исключена - типа корпоративный стандарт и за этим жесткий контроль.
Я бы не стал на это рассчитывать. И вообще то, о чем я сказал - это не геометрия. Это некие свойства.А если у тебя блок вставлен в пространство листа? Ты же у него внутри слои поменял.В моем случае это исключено - там только форматки в нулевом слое, видовые окна и все. Любая другая геометрия там исключена - типа корпоративный стандарт и за этим жесткий контроль.