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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > как отличить внешнюю ссылку от блока .NET

как отличить внешнюю ссылку от блока .NET

Ответ
Поиск в этой теме
Непрочитано 21.11.2010, 15:42 #1
как отличить внешнюю ссылку от блока .NET
xsakabsx
 
Регистрация: 18.04.2010
Сообщений: 46

GetType дает одно и тоже на Всылки и блоки :

Код:
[Выделить все]
Autodesk.AutoCAD.DatabaseServices.BlockReference
Просмотров: 1764
 
Непрочитано 21.11.2010, 16:00
#2
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,407
Отправить сообщение для Александр Ривилис с помощью Skype™


По BlockReference получаешь BlockTableRecord. А у BlockTableRecord есть свойство IsFromExternalReference
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 22.11.2010, 00:50
#3
xsakabsx


 
Регистрация: 18.04.2010
Сообщений: 46


тоесть я через транзакцию имея только Id делаю примерно так

Код:
[Выделить все]
BlockTableRecord currBTR = trans.GetObject(id,OpenMode.ForWrite) as BlockTableRecord;
acEd.WriteMessage("\n {0}",currBTR.IsFromExternalReferense)

я В C# новенький прошу сильно за глупости не ругать )

то по идее этот код должен мне вывести TRUE если это -xref а не просто блок ?
xsakabsx вне форума  
 
Непрочитано 22.11.2010, 09:11
#4
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,407
Отправить сообщение для Александр Ривилис с помощью Skype™


id чье ты имеешь? Если id для BlockTableRecord, то все правильно кроме одного. Если тебе нужно прочитать информацию о примитиве, а не изменять его, то открывать "для записи" (OpenMode.ForWrite) не нужно. Открывай "для чтения" (OpenMode.ForRead).
Если же это у тебя id для BlockReference, то сначала ты должен получить id для его BlockTableRecord:
Код:
[Выделить все]
BlockReference pIns = trans.GetObject(id,OpenMode.ForRead) as BlockReference;
ObjectId idBtr = pIns.BlockTableRecord;
// Ну а дальше уже твое
BlockTableRecord currBTR = trans.GetObject(idBtr,OpenMode.ForRead) as BlockTableRecord;
acEd.WriteMessage("\n {0}",currBTR.IsFromExternalReferense);
Где-то так.
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 22.11.2010, 12:32
1 | #5
xsakabsx


 
Регистрация: 18.04.2010
Сообщений: 46


спасибо проверил работает
Id у меня был от BlockReferense

но тут у меня вопрос возник почему не бидятса xref ы (
Код:
[Выделить все]
using System;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;

namespace XrefInsertion
{
    public class Class1
    {
        //Осноыные ссылки на переменные Autocad
        Document acDWG = Application.DocumentManager.MdiActiveDocument;
        Editor acED = Application.DocumentManager.MdiActiveDocument.Editor;
        Database acDB = Application.DocumentManager.MdiActiveDocument.Database;

        [CommandMethod("xreftest1")]
        public void allxrefin()
        {
            Application.SetSystemVariable("BINDTYPE",1);
            acDWG.SendStringToExecute(".-xref _bind *", true, false, false);
        }
      


        [CommandMethod("XrefInsert")]
        public void xrefinsert()
        {
        //вспомогательные переменные
        ObjectIdCollection xRefObjects = new ObjectIdCollection();
        ObjectIdCollection xrefBTRIds = new ObjectIdCollection();
        ObjectId[] xrefIds;
        //переменые типов
        Type blocksType = typeof(Autodesk.AutoCAD.DatabaseServices.BlockReference);

            using (Transaction acTrans = acDB.TransactionManager.StartTransaction())
            {
                PromptSelectionResult allOjectPR = acED.SelectAll();
                if (allOjectPR.Status == PromptStatus.OK)
                {
                    //**********************************************************************
                    SelectionSet AllObject = allOjectPR.Value;
                    foreach (SelectedObject SelObj in AllObject)
                    {
                        Entity currObjEntyty = acTrans.GetObject(SelObj.ObjectId, OpenMode.ForRead) as Entity;
                        Type currObjType = currObjEntyty.GetType();
                        if (currObjType == blocksType)
                        {
                            BlockReference currBlRef = acTrans.GetObject(SelObj.ObjectId, OpenMode.ForRead) as BlockReference;
                            ObjectId bTRId = currBlRef.BlockTableRecord;
                            BlockTableRecord currBlTR = acTrans.GetObject(bTRId, OpenMode.ForRead) as BlockTableRecord;
                            if (currBlTR.IsFromExternalReference == true)
                            {
                                xRefObjects.Add(SelObj.ObjectId);
                                xrefBTRIds.Add(currBlRef.BlockTableRecord);
                            }

                        }
                    }
                    //**********************************************************************
                    if (xRefObjects.Count == 0)
                    {
                        acED.WriteMessage("внешних ссылок в файле не обнаружено");

                    }
                    else
                    {
                        xrefIds = new ObjectId[xRefObjects.Count];
                        for (int i = 0; xRefObjects.Count > i; i++)
                        {
                            xrefIds[i] = xRefObjects[i];

                        }
                       acDB.BindXrefs(xrefBTRIds,false);
                      acED.SetImpliedSelection(xrefIds);
                       
                        

                    }


                    //**********************************************************************
                }
                else
                {
                    acED.WriteMessage("что то пошло не так !!!!");
                }
            }
        }
    }
}

Последний раз редактировалось xsakabsx, 22.11.2010 в 17:08.
xsakabsx вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > как отличить внешнюю ссылку от блока .NET

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу разбить внешнюю ссылку (AutoCAD Architecture 2008) Сагдия Вертикальные решения на базе AutoCAD 12 05.02.2021 09:33
Запись параметров вставки внешней ссылки в саму внешнюю ссылку. Supermax Программирование 72 27.07.2009 16:30
как можно внешнюю ссылку состоящую из растров разбить на сами растровые изображения? Оле AutoCAD 6 13.02.2009 14:19
Перенос объектов во внешнюю ссылку Supermax AutoCAD 3 09.12.2007 21:44
Конвертор по переводу блока во внешнюю ссылку Dude Great Программирование 14 04.07.2005 08:58