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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > REMOVEALLPROXY для BricsCAD

REMOVEALLPROXY для BricsCAD

Ответ
Поиск в этой теме
Непрочитано 12.03.2020, 13:49 #1
REMOVEALLPROXY для BricsCAD
ksumatokhin
 
Регистрация: 04.04.2019
Сообщений: 14

Здравствуйте, уважаемые форумчане!

Однажды Александр Ривилис выложил исходники своей чудесной программы REMOVEALLPROXY.
Вот источник: https://adn-cis.org/forum/index.php?topic=1060.0
Далее, развивая тему Андрей Бушман выкладывал адаптированный код на C#, а в конце концов
выложил у себя в блоге альтернативу этой программы. Источник: http://bushman-andrey.blogspot.com/2...eallproxy.html.
В статье он писал, что его код может работать и под BricsCAD.

Но сейчас нигде найти версию для BricsCADа не удается.

Прошу участников форума помочь мне скомпилировать выложенные коды под BricsCAD. Проблема в том, что
я совершенно не понимаю как это можно сделать, но очень хотел бы научиться.
Я не понимаю, в какой среде это нужно писать, как и что подгружать и т.д.
Нашел статью https://knowledge.autodesk.com/suppo...-overview.html
где описываются первые шаги для создания плагинов для AutoCAD, там говорится что дополнительно нужно установить:
Visual Studio
The ObjectARX SDK
The AutoCAD .NET Wizards

Подскажите пожалуйста, что нужно установить, что бы можно было скомпилировать REMOVEALLPROXY для BricsCAD.
Заранее спасибо и помните, что все когда то учатся, прошу помочь мне с этим.
Просмотров: 3256
 
Непрочитано 12.03.2020, 14:23
#2
trir


 
Регистрация: 18.12.2010
Сообщений: 4,517


https://www.bricsys.com/bricscad/hel...T_overview.htm
trir вне форума  
 
Непрочитано 12.03.2020, 14:25
#3
veb86

Проектировщик электрических сетей
 
Регистрация: 17.01.2014
Пенза
Сообщений: 183


Цитата:
Сообщение от ksumatokhin Посмотреть сообщение
где описываются первые шаги для создания плагинов для AutoCAD, там говорится что дополнительно нужно установить:
Visual Studio
The ObjectARX SDK
The AutoCAD .NET Wizards

Подскажите пожалуйста, что нужно установить, что бы можно было скомпилировать REMOVEALLPROXY для BricsCAD.
Заранее спасибо и помните, что все когда то учатся, прошу помочь мне с этим.
Здесь мой вопрос только в сторону автокада. У Вас тоже самое только,в Вашем случае нужно будет в Visual Studio подключать библиотеки из папки bricscad.
Я в свое время подключал следующее:
BrxMgd.dll
TD_Mgd.dll
TD_mgdBrep.dll
veb86 вне форума  
 
Непрочитано 12.03.2020, 14:26
#4
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 9,294


Цитата:
Сообщение от ksumatokhin Посмотреть сообщение
Visual Studio
Да

Цитата:
Сообщение от ksumatokhin Посмотреть сообщение
The ObjectARX SDK
строго не обязательно - там документация и "заглушки" библиотек (сборок). Библиотеки можно подключить из каталога самой программы, документация есть онлайн для акада.


Цитата:
Сообщение от ksumatokhin Посмотреть сообщение
The AutoCAD .NET Wizards
Для начинающих может и нужно, но опять же - строго не обязательно. Создать проект библиотеки в VS и подключить в ссылки проекта акадовские библиотеки прекрасно и руками можно) Только не забыть сразу после подключения снять с них опцию копировать локально в свойствах ссылки.
Сергей812 вне форума  
 
Непрочитано 12.03.2020, 14:26
#5
veb86

Проектировщик электрических сетей
 
Регистрация: 17.01.2014
Пенза
Сообщений: 183


Цитата:
Сообщение от trir Посмотреть сообщение
Подскажи тоже самое только для автокада, я потерял ссылку на ресурс найти не получилось быстро
veb86 вне форума  
 
Непрочитано 12.03.2020, 14:38
#6
trir


 
Регистрация: 18.12.2010
Сообщений: 4,517


https://help.autodesk.com/view/OARX/...8-E00ED139E0D3
trir вне форума  
 
Автор темы   Непрочитано 12.03.2020, 17:35
#7
ksumatokhin


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


Подскажите пожалуйста как в Visual Studio подключать библиотеки?
В справке написано:
Create a class library using the class library wizard under your preferred .NET language.
Скажите, что нужно сделать пошагово в Visual Studio!!!
There are currently two DLLs that must be referenced (BrxMgd.dll and TD_Mgd.dll) plus one optional BREP API DLL (TD_MgdBrep.dll). These DLLs are located in your BricsCAD installation folder.

Последний раз редактировалось ksumatokhin, 12.03.2020 в 18:03.
ksumatokhin вне форума  
 
Непрочитано 12.03.2020, 18:02
#8
trir


 
Регистрация: 18.12.2010
Сообщений: 4,517


https://docs.microsoft.com/ru-ru/vis...t?view=vs-2019
trir вне форума  
 
Автор темы   Непрочитано 13.03.2020, 10:24
#9
ksumatokhin


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


Ребят, помогите разобраться, как перевести код работающий под АutoCAD, р работающий под BricsCAD!
В сообщении 6 на форуме есть 4 отдельных блока с кодом. Источник: https://adn-cis.org/forum/index.php?topic=1060.0
Вот как я у себя записал 1 блок:

Код:
[Выделить все]
using System;
using System.Text;
using System.Diagnostics;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.IO;

// ODA
using Teigha.Runtime;
using Teigha.DatabaseServices;
using Teigha.Geometry;

// Bricsys
using Bricscad.ApplicationServices;
using Bricscad.Runtime;
using Bricscad.EditorInput;
using Bricscad.Ribbon;
using Bricscad.Geometrical3dConstraints;

// com
using BricscadDb;
using BricscadApp;

// alias
using AcAp = Bricscad.ApplicationServices;
using AcDb = Teigha.DatabaseServices;
using AcEd = Bricscad.EditorInput;
using AcGe = Teigha.Geometry;
using System.Runtime.InteropServices;

namespace ImplementLink
{
    public static class Acad
    {
        #region Static Properties

        public static Bricscad.ApplicationServices.Document Document
        {
            get { return AcAp.Application.DocumentManager.MdiActiveDocument; }
        }

        public static AcDb.Database Database
        {
            get { return AcAp.Application.DocumentManager.MdiActiveDocument.Database; }
        }

        public static AcEd.Editor Editor
        {
            get { return AcAp.Application.DocumentManager.MdiActiveDocument.Editor; }
        }

        public static AcDb.TransactionManager TransactionManager
        {
            get { return AcAp.Application.DocumentManager.MdiActiveDocument.TransactionManager; }
        }

        #endregion

        #region Transactional Methods

        public static T Read<T>(this AcDb.ObjectId objectId, bool openErased = false, bool forceOpenOnLockedLayer = true)
            where T : AcDb.DBObject
        {
            return objectId.GetObject(AcDb.OpenMode.ForRead, openErased, forceOpenOnLockedLayer) as T;
        }

        public static T Write<T>(this AcDb.ObjectId objectId, bool openErased = false, bool forceOpenOnLockedLayer = true)
            where T : AcDb.DBObject
        {
            return objectId.GetObject(AcDb.OpenMode.ForWrite, openErased, forceOpenOnLockedLayer) as T;
        }

        #endregion
    }
}
Со вторым блоком начинаются проблемы.
1. Не понимаю, почему он вынесен отдельно. Это какой-то отдельный модуль, или его можно тупо добавить к написанному раньше.
2. Код
Код:
[Выделить все]
#if CORE
        public const string ACAD = "accore.dll";
        public const string ACDB = "acdb19.dll";
#else
        public const string ACAD = "acad.exe";
        public const string ACDB = "acdb18.dll";
#endif
 
#if WIN32
        [DllImport(ACAD, CallingConvention = CallingConvention.Cdecl, EntryPoint = "?acedResetScaleList@@YAX_N0PAVAcDbDatabase@@@Z")]
        public static extern void acedResetScaleList(bool b1, bool b2, IntPtr db);
#else
        [DllImport(ACAD, CallingConvention = CallingConvention.Cdecl, EntryPoint = "?acedResetScaleList@@YAX_N0PEAVAcDbDatabase@@@Z")]
        public static extern void acedResetScaleList(bool b1, bool b2, IntPtr db);
#endif
Вообще что означает? если написать
Код:
[Выделить все]
public const string ACAD = "bricscad.exe";
то возникает Ошибка CS0116 Пространство имен не может напрямую включать в себя такие члены, как поля или методы.

Вот, что у меня сейчас получилось:

using System;
using System.Text;
using System.Diagnostics;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.IO;

// ODA
using Teigha.Runtime;
using Teigha.DatabaseServices;
using Teigha.Geometry;

// Bricsys
using Bricscad.ApplicationServices;
using Bricscad.Runtime;
using Bricscad.EditorInput;
using Bricscad.Ribbon;
using Bricscad.Geometrical3dConstraints;

// com
using BricscadDb;
using BricscadApp;

// alias
using AcAp = Bricscad.ApplicationServices;
using AcDb = Teigha.DatabaseServices;
using AcEd = Bricscad.EditorInput;
using AcGe = Teigha.Geometry;
using System.Runtime.InteropServices;

namespace ImplementLink
{
public static class Acad
{
#region Static Properties

public static Bricscad.ApplicationServices.Document Document
{
get { return AcAp.Application.DocumentManager.MdiActiveDocument; }
}

public static AcDb.Database Database
{
get { return AcAp.Application.DocumentManager.MdiActiveDocument.Database; }
}

public static AcEd.Editor Editor
{
get { return AcAp.Application.DocumentManager.MdiActiveDocument.Editor; }
}

public static AcDb.TransactionManager TransactionManager
{
get { return AcAp.Application.DocumentManager.MdiActiveDocument.TransactionManager; }
}

#endregion

#region Transactional Methods

public static T Read<T>(this AcDb.ObjectId objectId, bool openErased = false, bool forceOpenOnLockedLayer = true)
where T : AcDb.DBObject
{
return objectId.GetObject(AcDb.OpenMode.ForRead, openErased, forceOpenOnLockedLayer) as T;
}

public static T Write<T>(this AcDb.ObjectId objectId, bool openErased = false, bool forceOpenOnLockedLayer = true)
where T : AcDb.DBObject
{
return objectId.GetObject(AcDb.OpenMode.ForWrite, openErased, forceOpenOnLockedLayer) as T;
}

#endregion
}
}

/*
#if CORE
public const string ACAD = "accore.dll";
public const string ACDB = "acdb19.dll";
#else
public const string ACAD = "acad.exe";
public const string ACDB = "acdb18.dll";
#endif

#if WIN32
[DllImport(ACAD, CallingConvention = CallingConvention.Cdecl, EntryPoint = "?acedResetScaleList@@YAX_N0PAVAcDbDatabase@@@Z")]
public static extern void acedResetScaleList(bool b1, bool b2, IntPtr db);
#else
[DllImport(ACAD, CallingConvention = CallingConvention.Cdecl, EntryPoint = "?acedResetScaleList@@YAX_N0PEAVAcDbDatabase@@@Z")]
public static extern void acedResetScaleList(bool b1, bool b2, IntPtr db);
#endif
*/
public const string ACAD = "bricscad.exe";

private static int PurgeDatabase(Database db)
{
int idCount = 0;
using (AcAp.Application.DocumentManager.MdiActiveDocument.LockDocument())
using (var tr = HostApplicationServices.WorkingDatabase.TransactionManager.StartTransaction())
{
ObjectIdCollection idsToPurge = new ObjectIdCollection();
RegAppTable rat = (RegAppTable)tr.GetObject(db.RegAppTableId, OpenMode.ForRead);

foreach (ObjectId raId in rat)
{
if (raId.IsValid)
{
idsToPurge.Add(raId);
}
}

db.Purge(idsToPurge);

foreach (ObjectId id in idsToPurge)
{
DBObject obj = tr.GetObject(id, OpenMode.ForWrite);
obj.Erase();
}

idCount = idsToPurge.Count;
tr.Commit();
}
return idCount;
}



помогите разобраться, как адаптировать REMOVEALLPROXY под BricsCAD.

Последний раз редактировалось ksumatokhin, 13.03.2020 в 10:32.
ksumatokhin вне форума  
 
Непрочитано 13.03.2020, 10:32
#10
trir


 
Регистрация: 18.12.2010
Сообщений: 4,517


Цитата:
Со вторым блоком начинаются проблемы.
это вообще C++
trir вне форума  
 
Автор темы   Непрочитано 13.03.2020, 10:36
#11
ksumatokhin


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


А 3 и 4 блок в сообщении #6 из https://adn-cis.org/forum/index.php?topic=1060.0 тоже C++?
ksumatokhin вне форума  
 
Непрочитано 13.03.2020, 10:36
#12
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 9,294


Цитата:
Сообщение от trir Посмотреть сообщение
это вообще C++
с чего бы?

----- добавлено через ~5 мин. -----
Цитата:
Сообщение от ksumatokhin Посмотреть сообщение
Вообще что означает? если написать
в зависимости: определен ли CORE или нет - та или иная версия кода идет в выходную сборку.

Цитата:
Сообщение от ksumatokhin Посмотреть сообщение
Пространство имен не может напрямую включать в себя такие члены, как поля или методы.
логично - это синтаксис языка: под что надо выделять память данных - должно быть спрятано внутри классов.
Сергей812 вне форума  
 
Непрочитано 13.03.2020, 17:02
#13
trir


 
Регистрация: 18.12.2010
Сообщений: 4,517


Цитата:
с чего бы?
там тег есть
Миниатюры
Нажмите на изображение для увеличения
Название: scr_cpp.PNG
Просмотров: 28
Размер:	26.9 Кб
ID:	224018  
trir вне форума  
 
Непрочитано 13.03.2020, 17:28
#14
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 9,294


Цитата:
Сообщение от trir Посмотреть сообщение
там тег есть
а ничего, что речь идет о шестом посте « Ответ #6 : 05-11-2014, 14:45:08 » по ссылке
Цитата:
Сообщение от ksumatokhin Посмотреть сообщение
В сообщении 6 на форуме есть 4 отдельных блока с кодом. Источник: https://adn-cis.org/forum/index.php?topic=1060.0
где 4 блока кода с тегом C#? Не вводите ТС в заблуждение, он и так пытается править код "на ощупь", судя по постам...
Сергей812 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > REMOVEALLPROXY для BricsCAD

Система Техэксперт дает уверенность в правильности и эффективности принимаемых инженерных решений!
Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему BricsCAD внедряет .shx в PDF а AutoCAD нет? ksumatokhin AutoCAD 20 08.06.2019 19:43
В Bricscad не работает СПДС. Bonapart15 Другие CAD системы 11 14.11.2018 15:10
Портирование .Net + lisp приложений для BricsCAD Sleekka LISP 12 25.12.2012 11:41
Нужен совет по BricsCAD VVITTALIK Другие CAD системы 9 21.01.2008 13:31
BricsCad Architecturals Прочее. Программное обеспечение 9 08.02.2006 11:59