Тема: Как програмно из C# создать слой дла Autocad?

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

Re: Как програмно из C# создать слой дла Autocad?

    public static ObjectId CreateLayer(String layerName)
    {
      ObjectId layerId;
      Database db = HostApplicationServices.WorkingDatabase;
      using (Transaction trans = db.TransactionManager.StartTransaction()) {
        LayerTable lt = (LayerTable)trans.GetObject(db.LayerTableId, OpenMode.ForWrite);
        // Проверяем нет ли еще слоя с таким именем в чертеже
        if (lt.Has(layerName)) {
          layerId = lt[layerName];
        } else {
          LayerTableRecord ltr = new LayerTableRecord();
          ltr.Name = layerName; // Задаем имя слоя
          layerId = lt.Add(ltr);
          trans.AddNewlyCreatedDBObject(ltr, true);
        }
        trans.Commit();
      }
      return layerId;
    }

Re: Как програмно из C# создать слой дла Autocad?

> Newbie17
Или тоже на VB.NET:

Imports System
Imports Autodesk.AutoCAD.EditorInput
Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.Geometry
Imports Autodesk.AutoCAD.Colors
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.ApplicationServices
Imports acadApp = Autodesk.AutoCAD.ApplicationServices
Imports acadDB = Autodesk.AutoCAD.DatabaseServices
Imports acadED = Autodesk.AutoCAD.EditorInput
Imports acadGo = Autodesk.AutoCAD.Geometry
Imports acadRT = Autodesk.AutoCAD.Runtime
Imports acadCol = Autodesk.AutoCAD.Colors
Public Class Class1
    <CommandMethod("ALB")> _
      Public Sub Doit()
        Try
            Dim oid As ObjectId = _
            MakeLayer("NewTableLayer", "Continuous", 34, True)
        Catch ex As acadRT.Exception
            MessageBox.Show(ex.StackTrace)
        Finally
        End Try
    End Sub
'//
'//
'//
    Public Shared Function MakeLayer(ByVal layerName As String, ByVal ltypeName As String, ByVal layerCol As Short, ByVal toPlot As Boolean) As ObjectId
        Dim db As Database = HostApplicationServices.WorkingDatabase
        Dim doc As Document = acadApp.Application.DocumentManager.MdiActiveDocument
        Dim dloc As DocumentLock = doc.LockDocument()
        Dim ed As Editor = doc.Editor
        Using tr As Transaction = db.TransactionManager.StartTransaction
            Dim lrt As LayerTable
            Dim layr As New LayerTableRecord
            lrt = CType(tr.GetObject(db.LayerTableId, OpenMode.ForWrite), LayerTable)
            '//
            If lrt.Has(layerName) Then
                db.Clayer = lrt(layerName)
            Else
                '//
                layr.Name = layerName
                layr.Color = acadCol.Color.FromColorIndex(ColorMethod.ByAci, layerCol)
                '//
                Dim ltypeID As ObjectId
                Dim ltt As LinetypeTable
                ltt = CType(tr.GetObject(db.LinetypeTableId, OpenMode.ForWrite), LinetypeTable)
                If ltt.Has(ltypeName) Then
                    ltypeID = ltt(ltypeName)
                Else
                    Dim ltype As New LinetypeTableRecord
                    ltype.Name = ltypeName
                    ltt.Add(ltype)
                    tr.AddNewlyCreatedDBObject(ltype, True)
                    ltypeID = ltype.ObjectId
                End If
                layr.LinetypeObjectId = ltypeID
                layr.IsPlottable = toPlot
                lrt.Add(layr)
                tr.AddNewlyCreatedDBObject(layr, True)
                db.Clayer = layr.ObjectId
            End If
            ed.Regen()
            tr.Commit()
            Return lrt(layerName)
        End Using
        dloc.Dispose()
    End Function
End Class

~'J'~

Re: Как програмно из C# создать слой дла Autocad?

Спасибо заработало.
Еще вопрос, как поставить для данного слоя параметры цвет и тип линии?
Еще раз спасибо.

Re: Как програмно из C# создать слой дла Autocad?

> Newbie17
Я может чего по слабости ума не понимаю, но ты хоть
код смотрел?
Там же есть все и слой и цвет и тип линии:
MakeLayer("NewTableLayer", "Continuous", 34, True) - где:
"NewTableLayer" - название слоя
"Continuous" - тип линии
34 - номер цвета (от 0 до 256)
True - слой печатаемый; False - нет
Чего тебе еще-то надо?
~'J'~

Re: Как програмно из C# создать слой дла Autocad?

Спасибо разобрался уже сам.
Просто по слабости ума не могу так спокойно переводить код одного языка в другой... А нужно именно в С#..
Еще раз спасибо вопрос исчерпан.

Re: Как програмно из C# создать слой дла Autocad?

> Newbie17
Можно использовать конвертер кода здесь:
http://www.kamalpatel.net/ConvertCSharp2VB.aspx
иногда правда требуется ручная доводка, напр.
блок с Using он почему-то не конвертит
Успехов,
~'J'~

Re: Как програмно из C# создать слой дла Autocad?

> Fatty
Так как ему нужно из VB.NET в C#, то скорее: http://labs.developerfusion.co.uk/conve … sharp.aspx

Re: Как програмно из C# создать слой дла Autocad?

> Александр Ривилис
Спасибо, Александр
~'J'~