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

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

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

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

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

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

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,405
Отправить сообщение для Александр Ривилис с помощью 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,405
Отправить сообщение для Александр Ривилис с помощью 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