(изменено: Денис Перепецкий, 10 марта 2014г. 15:24:48)

Тема: Запустить команду DIMLINEAR и т.д.

Задача такая: чтобы размеры всегда были в своем слое независимо от того какой активен.

1. Запомнить текущий слой
2. Если слой с размерами существует то сделать активным его, если нет - то создать.
3. Запустить команду _DIMLINEAR чтобы она была в слое с размерами (тут вопрос как лучше сделать)
4. Сделать активным слой из шага 1.

По поводу шага 2. Пытался сделать с помощью класса RotatedDimension(), получается коряво.
Т.е. размер проставляется по 3 точкам, но это не информативно, не так как прямое выполнение команды DIMLINEAR. Может там есть какие-то свойства для визульного... я не знаю...

Что в итоге: создание слоя работает, проставка размера в слое с размерами не работает. Размер все равно остается в текущем слое.

Делается на C#

Что сделано:

namespace LayerCreation
{
    public class Commands
    {
        static string layDimName = "DIMENSIONS";

        [CommandMethod("11")]
        public void CreateLayer()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Database db = doc.Database;
            Editor ed = doc.Editor;

            Transaction tr = db.TransactionManager.StartTransaction();

            ObjectId currLay = db.Clayer;

            using (tr)
            {
                LayerTable lt = (LayerTable)tr.GetObject(db.LayerTableId,OpenMode.ForRead);
                LayerTableRecord ltr = new LayerTableRecord();

                ltr.Name = layDimName;
                ltr.Color = Color.FromColorIndex(ColorMethod.ByAci, 140);
                ltr.LineWeight = LineWeight.LineWeight020;


                if (lt.Has(layDimName) != true)
                {
                    lt.UpgradeOpen();
                    ObjectId ltId = lt.Add(ltr);
                    tr.AddNewlyCreatedDBObject(ltr, true);
                    db.Clayer = lt[layDimName];
                }
                else
                {
                    db.Clayer = lt[layDimName];
                }

                
                tr.Commit();

                doc.SendStringToExecute("_DIMLINEAR\n", true, false, true);
                
                db.Clayer = currLay;
            }
        }
    }
}

Re: Запустить команду DIMLINEAR и т.д.

Мне кажется, что проще будет подписаться на событие команд (в лиспе эти вещи называются "реакторами").

Re: Запустить команду DIMLINEAR и т.д.

ЛИСПом вообще не владею

Re: Запустить команду DIMLINEAR и т.д.

Я говорил не о лиспе, а о технологии.

Re: Запустить команду DIMLINEAR и т.д.

ааа... так то да...

Re: Запустить команду DIMLINEAR и т.д.

http://docs.autodesk.com/ACD/2010/ENU/A … r=d0e52566

Re: Запустить команду DIMLINEAR и т.д.

Вот готовое решение: https://sites.google.com/site/bushmansn … ox/stati/x

Re: Запустить команду DIMLINEAR и т.д.

ага, вчера вечером тоже нашел его, спасибо