Тема: Запрет создания слоев

Здравствуйте.
Есть шаблон АutoCAD содержащий определенные мною слои. Задача в том, чтобы пользователь не мог добавлять собственные слои.
Подскажите пожайлуста, можно ли на VBA написать макрос, который бы запрещал пользователям создавать собственные слои. Необходимо еще учесть и то, что при копировании обьектов из другого файла, слои на которых они находятся не должны создаваться в шаблоне, а например копироваться на 0 слой или другой.
Спасибо!

Re: Запрет создания слоев

Решение лобовое, грубое... но может кто предложит что-нибудь еще?
Поместить код в модуль ThisDrawing:

Option Explicit
Const LAYER_LIST As String = "0 hatch TXT MyTemplateLayer"
'-------------------------------------------------------------
Private Sub AcadDocument_EndCommand(ByVal CommandName As String)
    MsgBox CommandName
    If (CommandName = "LAYER") Then
        Call LayLimit
    ElseIf (CommandName = "PASTECLIP") Then
        Call LayChange
        Call LayLimit
    End If
End Sub
Private Sub LayLimit()
    Dim lay As AcadLayer
    For Each lay In ThisDrawing.Layers
        If InStr(LAYER_LIST, lay.Name) = 0 Then
           lay.Delete
        End If
    Next lay
End Sub
Private Sub LayChange()
    Dim lay As AcadLayer
    Dim vEntity As AcadEntity
    Dim i As Integer
    For Each lay In ThisDrawing.Layers
        If InStr(LAYER_LIST, lay.Name) = 0 Then
            For i = 0 To ThisDrawing.ModelSpace.Count - 1
                Set vEntity = ThisDrawing.ModelSpace.Item(i)
                If vEntity.Layer = lay.Name Then
                    vEntity.Layer = "MyTemplateLayer"
                End If
            Next i
        End If
    Next lay
End Sub

Re: Запрет создания слоев

Рано или поздно пользователи или разбегутся, или намылят шею кое-кому.

Re: Запрет создания слоев

> LeonidSN
А оно точно работает?

Re: Запрет создания слоев

> Владимир Громов
В принципе согласен, но "кое-кто" хочет так сделать

> Rust
Работает в той степени, в какой работают реакторы в VBA. Попробуй...

Re: Запрет создания слоев

> LeonidSN
Мне , конечно, стыдно, но я смог только запустить через Visual Basic Editor. И ничего не произошло. А что бы не сильно тебя напрягать, хочу попутно еще один вопрос задать: "А если попадется зловредный пользователь и выгрузит этот макрос, да как начнет плодить свои Layer со страшной силой?"...Интере у меня чисто академический. Если нудно отвечать такому неучу и лодырю как я, то и ни к чему напрягаться. :)

Re: Запрет создания слоев

Из ЛИСПа https://www.caduser.ru/forum/topic40464.html
тема перешла с тем же архиглупым желанием в VBA. В Автокаде есть еще несколько языков и способов программирования. Но! Так и хочется спросить:"На фига?"
"Зри в корень!" К.Прутков

> Rust
Создание или наличие слоёв надо стандартизовывать о чём писалось неоднократно.
Потом специальной командой проверять и указывать авторам на несоответствие.
Иначе точно будет так, как заметил > Владимир Громов (2008-02-10 21:45:52)

Re: Запрет создания слоев

Аж абыдна — вопрос был КАК, а обсуждение пошло на тему ЗАЧЕМ.
Так и не узнали как же запретить создание слоев.

Re: Запрет создания слоев

Как? - ликвидировать диспетчер слоев. Управлять  слоями через командную строку замучаешься.

Re: Запрет создания слоев

> Rust
...я смог только запустить через Visual Basic Editor. И ничего не произошло.
Происходить должно "что-то", когда добавляешь новый слой или вставляешь примитив методом Copy-Paste. При этом должен быть загружен в Автокад обсуждаемый макрос и, конечно, отредактирована строка LAYER_LIST, т.е. список допустимых слоев.
А вот интересно, что скажет начальник транспортного цеха по имени remlin?

Re: Запрет создания слоев

_.checkstandards :?:

Re: Запрет создания слоев

...А если попадется зловредный пользователь и выгрузит этот макрос...

С этим разобрался. Выгрузить не получится. Уже хорошо.

Re: Запрет создания слоев

Ограничивать создание слоёв надо вот зачем:
AutoCAD используется для ведения топографической карты, все обьекты на карте можно расположить на заранее определенных слоях (по условным знакам), например:
1.Строения, здания и их части
2.Объекты промышленного производства
3.Геодезические пункты
4.Автомобильные дороги
и т.д. Слоев всего около 15-20 штук.
и есть пользователи которые на основе полевых измерений создают планы земельных участков, которые затем необходимо перенести в общую карту. Но так как пользователи могут создавать свои слои с разными названиями, то при переносе в общую карту они и там (в карте) будут создаваться. - а это недопустимо. Поэтому и хотелось бы ограничить создание слоёв, в том числе и при копировании. А определенные слои по топографическим условным знакам пользователям вполне достаточно и своих создавать не придется.

Re: Запрет создания слоев

> remlin
Мне видится, что вопрос скорее организационный, чем технический. Надо написать определенный стандарт по использованию слоев и заставить всех причастных выполнять его.
Кто знает что взбредет в голову очередному чертежнику и какие его "неправильные" слои в какие правильные надо будет переводить. Как это запрограммировать??
Ах ты... не прочитал внимательно ветку! Обо всем этом уже сказано> Alan (2008-02-11 11:03:23)
Ну прошу считать меня присоединившимся к мнению.

Re: Запрет создания слоев

remlin пишет:

AutoCAD используется для ведения топографической карты, все обьекты на карте можно расположить на заранее определенных слоях (по условным знакам)...

Есть такой продукт AutoCAD Map 3D. Он специально "заточен" под картографию и ГИС. У него есть функция классификации объектов. т.е. заранее описывается, что такой-то объект (например водопроводный колодец) изображается следующим образом: блоком с именем well, на слое gis_water, цветом "синий"...
Пользователю в таком случае для изображения колодца нужно только указать, что он собирается создать объект "колодец водопровода" и указать точку вставки...
Всех проблем данная функция конечно же не решит, но наведению порядка поспособствует...
______________
Удачи.

Re: Запрет создания слоев

Конечно я знаю про все плюсы ГИС систем. Но в той фирме где я работаю, пользователи уже 5 лет работают в AutoCAD, скопилось очень много отдельных файлов,нет ни какой  организации классификации слоёв. Моя задача перевести все эти отдельные файлы в общую карту путем вставки в "оригинальные координаты".
Как мне кажется эту задачу наиболее просто решить на VBA, со следующим общим алгоритмом:
1.При возникновении события вставки в "оригинальные координаты", проверяем что все вставляемые  слои соответствуют определенному "списку" допустимых слоёв.
2. Если появляется слой не из "списка" выдаем диалоговое окно со списком всех слоев из "списка" на который можно перекинуть все примитивы из слоя не из "списка".
Проблема в том, что я плохо знаком с VBА, и если можно хотя бы примерный код этого алгоритма.

Re: Запрет создания слоев

Код почему-то не приводит к желаемым результатам. После создания слоя выходит сообщение об ошибке и всё. Слой всё равно создан. Может кроме прописывания в модуль надо ещё чего-то?

Re: Запрет создания слоев

А есть ещё мысль.
Можно ли сделать более информативно, типа присоздании слоя после нажатии кнопки "ОК" появляется сообщение "Создание слоя невозможно" и кнопка "ОК", при нажатии на которую (как и при "ESC", "ENTER") происходит удаление слоя, как при очистке. И сохранить это всё в модуле.
Если не корректно выразился прошу снисхождения, но буду рад помощи.

Re: Запрет создания слоев

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

Re: Запрет создания слоев

В дополнение. Можно установить файлу свойство Hidden (спрятанный). Другой вариант: присвоить файлу какое-нибудь абстрактное имя и поместить в какую-то папку, в которой пользователи не будут искать. Полное имя файла помещается в макрос, а макрос закрывается на пароль.Таким образом, без макроса в файл не попасть … «чайнику». Хакер найдет и в том, и в другом случае. Но это уже вопросы службы безопасности.
Кроме того, надо будет сделать следующие макросы:
1.Копирование файла для пользователя (без показа файла). Например, на топоплане проектировщику надо что-то посмотреть или запроектировать. В этом случае предусмотреть создание копии с именем, указанным пользователем
2.Проверка файла: не попал ли все-таки каким-то образом нестандартный слой, условный знак, стиль текста и т.п.
Ну и так далее. Например, в макросе загрузки дополнений можно предусмотреть, чтобы при щелчке мышкой по стандартному слою появлялся Label с кратким описанием содержимого слоя и/или открывался чертеж с примером по этому слою и т.п.