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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > VBA. Размораживание слоя, построение объекта в нем, замораживание слоя = ошибка

VBA. Размораживание слоя, построение объекта в нем, замораживание слоя = ошибка

Ответ
Поиск в этой теме
Непрочитано 05.03.2009, 20:14 #1
VBA. Размораживание слоя, построение объекта в нем, замораживание слоя = ошибка
Alexey_02
 
Москва
Регистрация: 23.05.2007
Сообщений: 94

В ниже приведенном коде создается объект в нулевом слое. После построения происходит возврат в начальное состояние слоев и возврат активного слоя. Предусмотрено, что если нулевой слой был выключен, заморожен или заблокирован, то вернуть его в это же состояние. вкл./выкл., блок./разбл. работает, а вот когда нулевой слой был заморожен, при его возврате возникает ошибка возникает.
run-time error '-2145386348(80200094)
Неверный слой. Помогите, пожалуйста, разобраться, где ошибка, что не предусмотрел.
Код:
[Выделить все]
Private Sub CmdOK_Click()
    Dim dblStartPointX0 As Double
    Dim dblStartPointY0 As Double
    Dim dblStartPointZ0 As Double
    Dim dblStartPoint(0 To 2) As Double
    Dim dblEndPoint(0 To 2) As Double
    Dim boolLayer0On As Boolean
    Dim boolLayer0Freeze As Boolean
    Dim boolLayer0Lock As Boolean
    Dim objLine As AcadLine
    Dim strCurrentActiveLayer As String

    dblStartPointX0 = 0: dblStartPointY0 = 0: dblStartPointZ0 = 0
    
    strCurrentActiveLayer = ThisDrawing.ActiveLayer.Name
    
    With ThisDrawing.Layers(0)
        If .LayerOn = False Then
            boolLayer0On = False
            .LayerOn = True
        Else
            boolLayer0On = True
        End If
        If .Freeze = True Then
            .Freeze = False
            boolLayer0Freeze = True
        Else
            boolLayer0Freeze = False
        End If
        If .Lock = True Then
            .Lock = False
            boolLayer0Lock = True
        Else
            boolLayer0Lock = False
        End If
        .color = acWhite
        .Linetype = "continuous"
        .Lineweight = acLnWt025
    End With

    If ThisDrawing.ActiveLayer.Name <> "0" Then
        ThisDrawing.ActiveLayer = ThisDrawing.Layers("0")
    End If

    'Построение объекта
    dblStartPoint(0) = dblStartPointX0: dblStartPoint(1) = dblStartPointY0: dblStartPoint(2) = dblStartPointZ0
    dblEndPoint(0) = dblStartPointX0 + 100: dblEndPoint(1) = dblStartPointY0 + 100: dblEndPoint(2) = dblStartPointZ0
    Set objLine = ThisDrawing.ModelSpace.AddLine(dblStartPoint, dblEndPoint)


    With ThisDrawing.Layers(0)
    If boolLayer0On = False Then
        .LayerOn = False 'ThisDrawing.Layers(0).LayerOn = False
        MsgBox "Вставлено в 0 слой, но он выключен. Для просмотра вставленного включите 0 слой."
    End If
    If boolLayer0Freeze = True Then
        .Freeze = True  'ТУТ ВОЗНИКАЕТ ОШИБКА
        MsgBox "Вставлено в 0 слой, но он заморожен. Для просмотра вставленного разморозте 0 слой."
    End If
    If boolLayer0Lock = True Then
        .Lock = True 'ThisDrawing.Layers(0).Lock = True
    End If
    End With

    ThisDrawing.ActiveLayer = ThisDrawing.Layers(strCurrentActiveLayer)
    ZoomAll
End Sub
__________________
Вот так вот, ...
Просмотров: 2485
 
Непрочитано 06.03.2009, 01:33
#2
Кулик Алексей aka kpblc
Moderator

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


А если попробовать так?
Код:
[Выделить все]
Private Sub CmdOK_Click()

Dim dblStartPointX0 As Double, dblStartPointY0 As Double, dblStartPointZ0 As Double
Dim dblStartPoint(0 To 2) As Double, dblEndPoint(0 To 2) As Double, boolLayer0On As Boolean
Dim boolLayer0Freeze As Boolean, boolLayer0Lock As Boolean, objLine As AcadLine
Dim strCurrentActiveLayer As String

  dblStartPointX0 = 0: dblStartPointY0 = 0: dblStartPointZ0 = 0
  strCurrentActiveLayer = ThisDrawing.ActiveLayer.Name
  
  ' Разблокирование текущего слоя
  ' Этого достаточно
  With ThisDrawing.Layers.Item(strCurrentActiveLayer)
    boolLayer0Lock = .Lock
    .Lock = False
  End With
  
  'Построение объекта
  dblStartPoint(0) = dblStartPointX0: dblStartPoint(1) = dblStartPointY0: dblStartPoint(2) = dblStartPointZ0
  dblEndPoint(0) = dblStartPointX0 + 100: dblEndPoint(1) = dblStartPointY0 + 100: dblEndPoint(2) = dblStartPointZ0
  Set objLine = ThisDrawing.ModelSpace.AddLine(dblStartPoint, dblEndPoint)
  ' Назначение свойств построенному объекту
  objLine.color = acWhite
  objLine.Linetype = "Continuous"
  objLine.Lineweight = acLnWt025
  objLine.Layer = "0"
  objLine.Update
  ThisDrawing.Layers.Item(strCurrentActiveLayer).Lock = boolLayer0Lock
  
  ZoomAll
End Sub
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 06.03.2009, 08:26
#3
AlexV

Инженер
 
Регистрация: 02.10.2008
С-Пб
Сообщений: 3,662


Ну правильно, сначала:
Цитата:
If ThisDrawing.ActiveLayer.Name <> "0" Then
ThisDrawing.ActiveLayer = ThisDrawing.Layers("0")
End If
А потом:
Цитата:
If boolLayer0Freeze = True Then
.Freeze = True 'ТУТ ВОЗНИКАЕТ ОШИБКА
MsgBox "Вставлено в 0 слой, но он заморожен. Для просмотра вставленного разморозте 0 слой."
End If
То есть попытка заморозить текущий слой.
__________________
...Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка - ложка понарошку,
А по правде, - это лом!
AlexV вне форума  
 
Автор темы   Непрочитано 06.03.2009, 22:33
#4
Alexey_02


 
Регистрация: 23.05.2007
Москва
Сообщений: 94


Спасибо, Кулик Алексей aka kpblc и особенно AlexV.
Точно, надо сначала возвратиться к текущему слою, а потом востанавливать параметры нулевого. Передвинул строку:
ThisDrawing.ActiveLayer = ThisDrawing.Layers(strCurrentActiveLayer)
выше, все заработало. Спасибо.
__________________
Вот так вот, ...
Alexey_02 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > VBA. Размораживание слоя, построение объекта в нем, замораживание слоя = ошибка

Реверс. Автоматическая пакетная печать множества рамок (форматов) из пространства модели и листов
Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помощь по Лире Серега М Лира / Лира-САПР 52 28.05.2007 02:47