Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: nolte от 16-10-2014, 01:42:14

Название: От полного нуля до ...
Отправлено: nolte от 16-10-2014, 01:42:14
доброго здравия
имею: ЖЕЛАНИЕ, autocad 2014, vs2012, некоторый опыт общения с VLISP.
хотелось бы освоить C# & AutoCAD.
С чего начать, как вообще связать vs с AutoCAD и если можно небольшой пример по построению отрезка или другого примитива в автокаде.
Название: Re: От полного нуля до ...
Отправлено: Александр Ривилис от 16-10-2014, 01:56:08
Приветствую на форуме!
С чего начать
С чтения литературы по .NET и C#: http://adn-cis.org/forum/index.php?topic=400.0
После этого можно переходить к изучению AutoCAD .NET API.
если можно небольшой пример по построению отрезка или другого примитива в автокаде.
Можно. Вот пример построения контура (замкнутой полилинии). Вершины полилинии указывает пользователь.
http://adn-cis.org/forum/index.php?topic=975.msg4284#msg4284
Название: Re: От полного нуля до ...
Отправлено: nolte от 16-10-2014, 02:15:56
литература конечно же изучается и примеров не мало как на форуме так и в инете но вот вопрос, просто записать в файл
using Autodesk.AutoCAD***
не работает надо наверняка подключить какие то библиотеки, короче попытки разобраться самостоятельно не увенчались успехом (хоть что то написанное в vs заработало в каде), вот обратился за помощью.
понятное дело вопрос смешной, но для меня пока что невыполнимый.
Название: Re: От полного нуля до ...
Отправлено: bakaIIHX от 16-10-2014, 02:24:38
литература конечно же изучается и примеров не мало как на форуме так и в инете но вот вопрос, просто записать в файл
using Autodesk.AutoCAD***
не работает надо наверняка подключить какие то библиотеки, короче попытки разобраться самостоятельно не увенчались успехом (хоть что то написанное в vs заработало в каде), вот обратился за помощью.
понятное дело вопрос смешной, но для меня пока что невыполнимый.

Сам я большими познаниями не обладаю, но тут подскажу.
Необходимо подключить библиотеки, в обозреватели решений с правой стороны, нажимаешь добавить ссылки-обзор-в папке с автокадом ищешь acdbmgd.dll и acmgd.dll
Название: Re: От полного нуля до ...
Отправлено: trir от 16-10-2014, 07:02:24
bakaIIHX забыл про AcCoreMgd.dll (кажется она в 2014 появилась...)
http://help.autodesk.com/view/ACD/2015/ENU/?guid=GUID-8657D153-0120-4881-A3C8-E00ED139E0D3

Цитировать
The AutoCAD .NET API is made up of different DLL files that contain a wide range of classes, structures, methods, and events that provide access to objects in a drawing file or the application. Each DLL file defines different namespaces which are used to organize the components of the libraries based on functionality.

The main DLL files of the AutoCAD .NET API that you will frequently use are:
•AcCoreMgd.dll. Use when working within the editor, publishing and plotting, and defining commands and functions that can be called from AutoLISP.
• AcDbMgd.dll. Use when working with objects stored in a drawing file.
• AcMgd.dll. Use when working with the application and user interface.
• AcCui.dll. Use when working with customization files.
Название: Re: От полного нуля до ...
Отправлено: JohnJ от 16-10-2014, 07:07:54
я начал с этой статьи http://habrahabr.ru/post/148844/
Название: Re: От полного нуля до ...
Отправлено: Александр Ривилис от 16-10-2014, 09:03:59
bakaIIHX забыл про AcCoreMgd.dll (кажется она в 2014 появилась...)
Она появилась в AutoCAD 2013
не работает надо наверняка подключить какие то библиотеки, короче попытки разобраться самостоятельно не увенчались успехом (хоть что то написанное в vs заработало в каде), вот обратился за помощью.
понятное дело вопрос смешной, но для меня пока что невыполнимый.
Вопрос совсем не смешной. Можно вручную подключить, как уже писали, acmgd.dll, acdbmgd.dll и accoremgd.dll - для начала этих трёх должно хватать. Эти dll-файлы есть в каталоге AutoCAD (там же где acad.exe) и в составе ObjectARX SDK в каталоге inc. Autodesk'овцы рекомендуют использовать те, которые в составе ObjectARX SDK. Очень важно если ты самостоятельно их подключаешь устанавливать им свойство Copy Local в FALSE:

(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fimg-fotki.yandex.ru%2Fget%2F2710%2F7842324.2%2F0_ea447_e1096c1c_orig.png&hash=199b8c20f21a6da6022af4cc44d447e0)

Вообще-то Autodesk'овцы сделали специальные помощники (AutoCAD .NET Wizards) для создания проекта в Visual Studio:

(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fimg-fotki.yandex.ru%2Fget%2F3305%2F7842324.2%2F0_ea448_e6ffd6cf_orig.png&hash=3dee3a19becb50727405e378264f60cd)
Скачать и установить этот помощник можно отсюда: http://www.autodesk.com/developautocad
В частности для AutoCAD 2014 и VS 2012: http://images.autodesk.com/adsk/files/AutoCAD_2014_dotnet_wizards.zip
Разархивируй и установи его (при этом Visual Studio не должна быть запущена).
После этого ты сможешь создавать новые проекты, которые уже настроены.
Вот так выглядит процесс создания нового проекта при помощи AutoCAD .NET Wizard 2014:
https://screencast.autodesk.com/main/details/80359404-12ac-45b7-99fa-40b299c60e1e

Название: Re: От полного нуля до ...
Отправлено: nolte от 16-10-2014, 11:23:04
спасибо всем откликнувшимся за помощь. процесс пошел, как говаривал классик.
все потиху становить доступным для понимания.
PS
думаю, не последний мой вопрос.
Название: Re: От полного нуля до ...
Отправлено: Александр Ривилис от 16-10-2014, 12:05:43
думаю, не последний мой вопрос.
С нетерпением жду!  :)
Название: Re: От полного нуля до ...
Отправлено: nolte от 16-10-2014, 23:41:04
вот, не выходит каменный цветочек. Затыка в следующем:
я переписываю код из примера по ссылке
JohnJ,
 
я начал с этой статьи http://habrahabr.ru/post/148844/
код компилируется, инициализируется в автокаде, но на команду,вводимую в ком строку, ругается
"неизвестная команда "бла бла бла""
код весь как есть записываю в файл "myPlagin.cs", автокад выдает строку, записанную в блоке initialize,
но команда не проходит. Команды, записанные в файле "myCommands.cs", автокад реагирует нормально то бишь понимает их, но если переместить новую команду в "myCommand.cd" то ругается уже vs.Короче куда ни кинься везде засада.Выручайте.
Да и еще файл ObjectARX, скачанный с сайта аутодеск обзывается так
Autodesk_ObjectARX_2014_Win_64_and_32Bit, другого к сожалению нет или я не нашел.
Название: Re: От полного нуля до ...
Отправлено: Александр Ривилис от 17-10-2014, 01:58:04
Ты как создавал проект? Вручную или при помощи AutoCAD .NET Wizard?
код весь как есть записываю в файл "myPlagin.cs"
Внимательнее. Файл называется myPlugin.cs
но если переместить новую команду в "myCommand.cd" то ругается уже vs.
1) Зачем её туда перемещать?
2) У тебя снова "засада" с именем файла. он не так называется.

Да и еще файл ObjectARX, скачанный с сайта аутодеск обзывается так
Autodesk_ObjectARX_2014_Win_64_and_32Bit, другого к сожалению нет или я не нашел.
Ты сейчас про ObjectARX SDK 2014 или про AutoCAD .NET Wizard говоришь? Если про ObjectARX SDK 2014 то ты нашел правильно. Его нужно скачать и разархивировать.

Так что немного внимательности и золотой ключик у тебя в руках. Пример на хабре сделан под AutoCAD 2007 - могут быть нестыковки. Я этот пример не смотрел - неинтересно. У нас на форуме их куча. Бери любой и смотри.
Название: Re: От полного нуля до ...
Отправлено: JohnJ от 17-10-2014, 04:57:03
код компилируется, инициализируется в автокаде, но на команду,вводимую в ком строку, ругается
"неизвестная команда "бла бла бла""
В автокаде 2014 помимо этих файлов
acdbmgd.dll
acmgd.dll
нужно ещё подцеплять
accoremgd.dll
и не забыть всем этим подключенным библиотекам установить свойство "Копировать локально" в false.

Команды не нужно никуда перемещать. Описывай их все в одном файле, а из функций просто вызывай код, который располагается в других местах.
Короче куда ни кинься везде засада.Выручайте.
Можешь выложить куда-нибудь свой получившийся проект, тогда будет понятнее где что не так.
Название: Re: От полного нуля до ...
Отправлено: nolte от 17-10-2014, 12:14:18
пример из помощи автокада и так же не работает.
Код - C# [Выбрать]
  1. using System;
  2. using Autodesk.AutoCAD.Runtime;
  3. using Autodesk.AutoCAD.ApplicationServices;
  4. using Autodesk.AutoCAD.DatabaseServices;
  5. using Autodesk.AutoCAD.Geometry;
  6. using Autodesk.AutoCAD.EditorInput;
  7.  
  8.  
  9. [assembly: ExtensionApplication(typeof(acad1.MyPlugin))]
  10.  
  11. namespace acad1
  12. {
  13.  
  14.    
  15.     public class MyPlugin : IExtensionApplication
  16.     {
  17.         [CommandMethod("AddLine")]
  18.         public static void AddLine()
  19.         {
  20.             Document acDoc = Application.DocumentManager.MdiActiveDocument;
  21.             Database acCurdb = acDoc.Database;
  22.             using (Transaction acTrans = acCurdb.TransactionManager.StartTransaction())
  23.             {
  24.                 BlockTable acBlkTbl;
  25.                 acBlkTbl = acTrans.GetObject(acCurdb.BlockTableId, OpenMode.ForRead) as BlockTable;
  26.  
  27.                 BlockTableRecord acBlkTblRec;
  28.                 acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],
  29.                                                 OpenMode.ForWrite) as BlockTableRecord;
  30.                 using (Line acLine = new Line(new Point3d(5, 5, 0),
  31.                                             new Point3d(12, 3, 0)))
  32.                 {
  33.                     acBlkTblRec.AppendEntity(acLine);
  34.                     acTrans.AddNewlyCreatedDBObject(acLine, true);
  35.                 }
  36.                 acTrans.Commit();
  37.             }
  38.         }
  39.  
  40.         void IExtensionApplication.Initialize()
  41.         {
  42.             var editor = Application.DocumentManager.MdiActiveDocument.Editor;
  43.             editor.WriteMessage("Initialize plugin..." + Environment.NewLine);
  44.         }
  45.  
  46.         void IExtensionApplication.Terminate()
  47.         {
  48.            
  49.         }
  50.  
  51.     }
  52.  
  53. }
  54.  
Название: Re: От полного нуля до ...
Отправлено: JohnJ от 17-10-2014, 12:17:53
попробуйте блокировать документ перед тем, как начать транзакцию:
using (acDoc.LockDocument()) {
    using (Transaction acTrans = acCurdb.TransactionManager.StartTransaction()) {
        ...
    }
}
Название: Re: От полного нуля до ...
Отправлено: Александр Ривилис от 17-10-2014, 12:25:17
пример из помощи автокада и так же не работает.
И не будет. Может быть не будешь таким лаконичным в описании проблем и:
1) Ответишь на вопросы, которые я задавал. Без них я вообще не могу понять что ты делаешь
2) Будешь выполнять мои рекомендации
Тогда мы придем к нужному результату.
Название: Re: От полного нуля до ...
Отправлено: Александр Ривилис от 17-10-2014, 12:32:09
P.S.: Кстати, приведенный тобой пример у меня заработал сразу.
Что я для этого сделал:
1) Создал новый проект при помощи AutoCAD .NET Wizard 2014
2) Удалил файл myCommands.cs
3) Заменил содержимое файла myPlugins.cs на то, которое ты написал
4) Откомпилировал пример, загрузил в AutoCAD и выполнил команду ADDLINE
5) Выполнил команду _ZOOM _ALL чтобы увидеть добавленный отрезок.
Отрезок на месте. Всё.
Название: Re: От полного нуля до ...
Отправлено: nolte от 17-10-2014, 12:37:50
Александр Ривилис,  да сори.
Цитировать
Ты как создавал проект? Вручную или при помощи AutoCAD .NET Wizard?
при помощи AutoCAD.NET Wizard
Цитировать
Ты сейчас про ObjectARX SDK 2014 или про AutoCAD .NET Wizard говоришь?
про ObjectARX SDK 2014.
Цитировать
2) Удалил файл myCommands.cs
не удалял, сейчас попробую.
Цитировать
3) Заменил содержимое файла myPlugins.cs на то, которое ты написал
да (полный текст см. выше).
Цитировать
4) Откомпилировал пример, загрузил в AutoCAD и выполнил команду ADDLINE
точно
Цитировать
5) Выполнил команду _ZOOM _ALL чтобы увидеть добавленный отрезок.
AutoCAD не принимает команду из пункта 4 ADDLINE.
Название: Re: От полного нуля до ...
Отправлено: nolte от 17-10-2014, 12:58:47
Удалил myCommands.cs и все сраслось :).
Название: Re: От полного нуля до ...
Отправлено: Александр Ривилис от 17-10-2014, 13:45:42
О! Где-то Андрей Бушман проводил исследования в каких случаях AutoCAD "видит" командные методы в нескольких классах, а в каких нет. Поэтому я предпочитаю все команды держать в одном классе и в одном файле.
Название: Re: От полного нуля до ...
Отправлено: Дмитрий Загорулькин от 17-10-2014, 14:23:23
Насколько я знаю, AutoCAD не видит команды если:
- класс не public.
- метод команды не public (если к тому же не void - то еще и ошибку выдаст).
- в атрибуте сборки [assembly: CommandClass ... ] прописан другой класс. В этом случае будут грузиться только команды из указанного в атрибуте класса.

Других ограничений вроде не было. Хоть в одном классе команды, хоть в нескольких.
Но я тоже предпочитаю описывать команды в одном классе, а этот класс указывать в атрибуте CommandClass. При этом, разные команды для удобства можно разносить по различным файлам, как части класса (partial class).
Название: Re: От полного нуля до ...
Отправлено: nolte от 29-10-2014, 17:42:56
Очередной глупый вопрос.
Где почитать что скрывают за собой(какие функции) библиотеки ObjectARX.
Крайне не хотелось бы изобретать велосипед и снова создавать(тем более, что получиться не ахти) функции, которые уже существуют.
Название: Re: От полного нуля до ...
Отправлено: Андрей Бушман от 29-10-2014, 22:20:35
Где-то Андрей Бушман проводил исследования в каких случаях AutoCAD "видит" командные методы в нескольких классах, а в каких нет.
Цитата: Загорулькин Дмитрий
Насколько я знаю
Дима "правильно знает". В дополнение к тому, что он написал, хочу добавить, что сборка может иметь столько атрибутов  CommandClass, сколько потребуется (т.е. вовсе не обязана ограничиваться лишь одним). Но если присутствует хотя бы один такой атрибут, то (как Дима уже сообщил) AutoCAD не будет искать команды нигде, кроме как в указанных при помощи этих атрибутах классах. Тут (https://sites.google.com/site/bushmansnetlaboratory/arx/rukovodstvo-razrabotcika-objectarx/netuse/wrapclasses/wrapstart/initopt/attuse) некоторый перевод SDK по теме.

А вот реализация IExtensionApplication в сборке должна быть одна, причём даже при наследовании классов её следует указывать явно (обусловлено криворукой реализацией Autodesk поиска IExtensionApplication) - подробности здесь (https://sites.google.com/site/bushmansnetlaboratory/moi-zametki/iextensionapplication).

Поэтому я предпочитаю все команды держать в одном классе и в одном файле.
Поскольку атрибутов CommandClass может быть сколько угодно и имеется возможность создавать частичные классы, то если команд много - я не леплю всё в одну, трудно перевариваемую кучу, но предпочитаю распределять логическими порциями по соответствующим классам. Так гораздо проще и удобней работать (имхо).
Название: Re: От полного нуля до ...
Отправлено: Андрей Бушман от 29-10-2014, 22:22:03
Где почитать что скрывают за собой(какие функции) библиотеки ObjectARX.
В документации ObjectARX SDK (см. подкаталог doc).
Название: Re: От полного нуля до ...
Отправлено: nolte от 29-10-2014, 22:50:29
Андрей Бушман,
Спасибо.
Название: Re: От полного нуля до ...
Отправлено: nolte от 11-06-2016, 09:58:53
и снова здравствуйте. Созрел для очередного вопроса. Итак:
Видел на просторах инета функцию, которая выдает длину и площадь выбранных примитивов, то есть, выбирается примитив - меняется цифера в форме, убирается примитив из набора (наверняка с помощью SHIFT) - меняется цифера. Попробовал сделать подобное, но все хорошо если нужен только конечный результат, то есть, закончил выбирать примитивы нажал ENTER - получил результат. Динамично не отслеживаются изменнения в SelectionSet.
На ум приходят несколько вариантов:
1. Как то получить набор примитивов, входящих в выбор, до того как создан окончательно SelectionSet.
2. Воспользовать Binding-ом WPF, но опять же надо к чему-то вязаться(этот вариант мне кажется более реальным).
3. SelectionSet - не правильный выбор, и решать задачу надо другим способом.
4. Вариант, которого я не знаю. :)
Пните в нужном направлении :).
код решения:
Plagin
Извините, вам запрещён просмотр содержимого спойлеров.

Data
Извините, вам запрещён просмотр содержимого спойлеров.

wpf
Извините, вам запрещён просмотр содержимого спойлеров.

Извините, вам запрещён просмотр содержимого спойлеров.
Название: Re: От полного нуля до ...
Отправлено: Александр Ривилис от 11-06-2016, 10:12:11
Видел на просторах инета функцию, которая выдает длину и площадь выбранных примитивов, то есть, выбирается примитив - меняется цифера в форме, убирается примитив из набора (наверняка с помощью SHIFT) - меняется цифера.
Остальное не читал. Подписывайся на события Editor.SelectionAdded и Editor.SelectionRemoved и отслеживай в них текущее состояние набора выбранных примитивов.
Название: Re: От полного нуля до ...
Отправлено: Дмитрий Загорулькин от 12-06-2016, 15:57:11
Editor.SelectionAdded и Editor.SelectionRemoved
Хм. А я подписывался на Document.ImpliedSelectionChanged и DocumentManager.DocumentActivated. Первое событие - для отслеживания изменения набора. Второе - чтобы обновлять данные при смене активного чертежа.
P.S> Еще раз перечитал "тз". Да, там не указано явно о каком выборе идет речь - предварительном или во время выполнения команды. Так что, может быть, я и не в тему.
P.S.S>
Цитировать
Видел на просторах инета функцию, которая выдает длину и площадь выбранных примитивов, то есть, выбирается примитив - меняется цифера в форме, убирается примитив из набора (наверняка с помощью SHIFT) - меняется цифера.
Александр Наумович, сдается мне, что речь идет о SelSim :)
Название: Re: От полного нуля до ...
Отправлено: nolte от 12-06-2016, 16:45:20
вот еще бы и примерчик бросили, а то никак не могу дойти чего и как отслеживать.
Название: Re: От полного нуля до ...
Отправлено: Дмитрий Загорулькин от 12-06-2016, 19:32:19
Editor.SelectionAdded
http://through-the-interface.typepad.com/through_the_interface/2011/08/preventing-autocad-objects-from-being-selected-using-net.html
Document.ImpliedSelectionChanged
http://through-the-interface.typepad.com/through_the_interface/2011/10/displaying-an-autocad-ribbon-tab-contextually-using-net.html
Название: Re: От полного нуля до ...
Отправлено: nolte от 12-06-2016, 20:37:56
разбираюсь как раз с этими примерами
спасибо
Название: Re: От полного нуля до ...
Отправлено: Александр Ривилис от 12-06-2016, 21:29:08
Александр Наумович, сдается мне, что речь идет о SelSim :)
Скорее GeomProps - там длина/площадь/объём пересчитываются при изменении набора предварительного выбора.
Название: Re: От полного нуля до ...
Отправлено: Дмитрий Загорулькин от 13-06-2016, 15:35:56
Ой, конечно же, GeomProps! Просто перепутал :)
Название: Re: От полного нуля до ...
Отправлено: Александр Ривилис от 13-06-2016, 15:45:25
Ой, конечно же, GeomProps! Просто перепутал :)
Только там совсем другая логика работы - без всяких реакторов. И на .NET это не реализуется (только при помощи прокладки типа OPMNETEXT).
Название: Re: От полного нуля до ...
Отправлено: nolte от 15-08-2017, 21:50:15
существует в .net эквивалент wcmath. то есть (wcmatch(vla-get-layer obj)"kkk*" можно быстро реализовать в .net. или надо выбирать примитивы а потом фильтровать их по слою.
Название: Re: От полного нуля до ...
Отправлено: Алексей Кулик от 15-08-2017, 22:54:57
См.регулярные выражения. В VB.NET, кажется, была конструкция Like.
Название: Re: От полного нуля до ...
Отправлено: Александр Ривилис от 15-08-2017, 23:41:05
существует в .net эквивалент wcmath. то есть (wcmatch(vla-get-layer obj)"kkk*" можно быстро реализовать в .net. или надо выбирать примитивы а потом фильтровать их по слою.
В AutoCAD .NET API есть полный эквивалент (wcmatch): Autodesk.AutoCAD.Internal.Utils.WcMatchEx
Тут пример использования: http://adn-cis.org/kak-poluchit-spisok-dostupnyix-plotterov-formatov-v-autocad.html
Третий параметр у этого метода означает игнорирование регистра букв. Чтобы был совершенно полный аналог с (wcmatch) третий параметр должен быть равен true.
Ну а вообще можно использовать и Regex для более сложных фильтров.
Название: Re: От полного нуля до ...
Отправлено: nolte от 15-08-2017, 23:59:27
прошу прощения не верно вопрос задал не (wcmatch(vla-get-layer obj)"kkk*") a
Код - Auto/Visual Lisp [Выбрать]
  1. (ssget ":D" (list(cons 8 "kkk*")))
дабы в набор выбирались примитивы на определенных слоях.
Название: Re: От полного нуля до ...
Отправлено: Александр Ривилис от 16-08-2017, 00:07:12
Как-то так тогда:
Код - C# [Выбрать]
  1. // Переменная для фильтра
  2. TypedValue[] filterlist = new TypedValue[1];
  3. // Критерии фильтра
  4. filterlist[0] = new TypedValue(8, "KKK*");
  5. // Создаем сам фильтр
  6. SelectionFilter filter = new SelectionFilter(filterlist);
  7. // Выборка
  8. var selection = ed.GetSelection(filter);
  9. if (selection.Status != PromptStatus.OK) return;
Название: Re: От полного нуля до ...
Отправлено: Александр Ривилис от 16-08-2017, 00:09:35
nolte
А зачем тебе ключевое слово ":D" понадобилось?
Название: Re: От полного нуля до ...
Отправлено: nolte от 16-08-2017, 00:20:55
":D" не принципиально, а переменная фильтра то что доктор прописал. смысл был в том, чтобы при формировании набора указать неполное названия слоя. Спасибо.
Название: Re: От полного нуля до ...
Отправлено: nolte от 25-08-2017, 00:23:22
вот и еще вопрос организационный.
плагины на .net ну очень зависят от версий ОС и автокада.
имеется у товарища автокад 2015 у меня 2014. Хотелось бы проверить то чего навоял прежде передать функцию для пользования.
Дык вот в связи с этим вопрос автокад прога платная и не дешевая где и как можно взять различные версии автокада и соответственно VS. не покупать же.
Название: Re: От полного нуля до ...
Отправлено: trir от 25-08-2017, 06:45:15
можно trial поставить (https://www.autodesk.ru/products/autocad/free-trial), а так - ADN (https://ru.wikipedia.org/wiki/Autodesk_Developer_Network)
Цитировать
Предоставление девелоперских лицензий на продукты Autodesk с открытым API для разработки, поддержки и демонстрации своих программных продуктов.
Название: Re: От полного нуля до ...
Отправлено: Алексей Кулик от 25-08-2017, 07:16:13
можно trial поставить (https://www.autodesk.ru/products/autocad/free-trial), а так - ADN (https://ru.wikipedia.org/wiki/Autodesk_Developer_Network)
Цитировать
Предоставление девелоперских лицензий на продукты Autodesk с открытым API для разработки, поддержки и демонстрации своих программных продуктов.
Но по лицензии ADN ни 2014, ни 2015 уже не поставить.
---
Добавлено: насчет 2015 могу ошибаться, но 2014 точно уже в пролете.
Название: Re: От полного нуля до ...
Отправлено: nolte от 25-08-2017, 11:23:46
и как жить дальше? ;D
Название: Re: От полного нуля до ...
Отправлено: Владимир Шу от 25-08-2017, 14:25:06
и как жить дальше?
как и все, отлаживать на виртуалке с триальным автокадом.
Название: Re: От полного нуля до ...
Отправлено: Дмитрий Загорулькин от 25-08-2017, 14:32:15
плагины на .net ну очень зависят от версий ОС и автокада.
Это смотря как сделать. Я пишу под 2014 версию и без перекомпиляции работает в версиях 2014-2018.
Название: Re: От полного нуля до ...
Отправлено: nolte от 25-08-2017, 14:58:35
Цитировать
Я пишу под 2014 версию и без перекомпиляции работает в версиях 2014-2018.
мои творения дальше моего компа не ходили пока что. И попробовать не было возможности.
Название: Re: От полного нуля до ...
Отправлено: nolte от 31-08-2017, 07:48:34
уважаемые знатоки. назрел очередной вопрос. Как программно начертить полилинию как это делает автокад т.е.
начальная точка(мышью), резинка, вершина, отрисовка сегмента, резинка, указание мышью следующей вершины и т.д....
отключение esc, space, enter.
вот придумал малость, но явно костыль. Отключение только клавишей esc. в ПСК отключение глючит, но в остальном работает исправно, но осюсение нехорошее от кода все таки есть.
Код - C# [Выбрать]
  1.        public static ObjectId LCPolyline()
  2.         {
  3.             //Point2dCollection pts = new Point2dCollection();
  4.             Point3d pt;
  5.             int numvertex = 0;
  6.             PromptPointResult ppr;
  7.             PromptPointOptions ppo = new PromptPointOptions("");
  8.             ppo.Message = "\nEnter start vertex :";
  9.             ppr = ed.GetPoint(ppo);
  10.             if (System.Convert.ToInt32(Application.GetSystemVariable("WORLDUCS")) == 1)
  11.                 pt = ppr.Value;
  12.             else
  13.                 pt = ppr.Value.TransformBy(ed.CurrentUserCoordinateSystem);
  14.             //pts.Add(new Point2d(pt.X, pt.Y));
  15.             Point2d pt0 = new Point2d(pt.X, pt.Y);
  16.  
  17.             while (!pt.Equals(new Point3d(0, 0, 0)))
  18.             {
  19.                 using (Transaction tr = db.TransactionManager.StartTransaction())
  20.                 {
  21.                     BlockTable bt = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
  22.                     BlockTableRecord btr = tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite)
  23.                         as BlockTableRecord;
  24.  
  25.                     numvertex = ++numvertex;
  26.                     ppo = new PromptPointOptions("");
  27.                     ppo.Message = "\nEnter next vertex :";
  28.                     ppo.UseBasePoint = true;
  29.                     ppo.BasePoint = ppr.Value;
  30.                     ppr = ed.GetPoint(ppo);
  31.                     if (System.Convert.ToInt32(Application.GetSystemVariable("WORLDUCS")) == 1)
  32.                         pt = ppr.Value;
  33.                     else
  34.                         pt = ppr.Value.TransformBy(ed.CurrentUserCoordinateSystem);
  35.                     if (!pt.Equals(new Point3d(0, 0, 0)))
  36.                     {
  37.                         if (numvertex == 1)
  38.                         {
  39.                             using (Polyline pl = new Polyline())
  40.                             {
  41.                                 pl.AddVertexAt(0, pt0, 0, 0, 0);
  42.                                 pl.AddVertexAt(numvertex, new Point2d(pt.X, pt.Y), 0, 0, 0);
  43.                                 btr.AppendEntity(pl);
  44.                                 tr.AddNewlyCreatedDBObject(pl, true);
  45.                                 ObjId = pl.ObjectId;
  46.                             }
  47.                         }
  48.                         else
  49.                         {
  50.                             Polyline pl = tr.GetObject(ObjId, OpenMode.ForWrite) as Polyline;
  51.                             pl.AddVertexAt(numvertex, new Point2d(pt.X, pt.Y), 0, 0, 0);
  52.                         }
  53.                     }
  54.                     tr.Commit();
  55.                 }
  56.             }
  57.             return ObjId;
  58.         }
Название: Re: От полного нуля до ...
Отправлено: Владимир Шу от 31-08-2017, 08:15:04
Draw polyline like autocad...  (http://www.theswamp.org/index.php?topic=29216.0)
Advanced jigging with AutoCAD .NET (http://through-the-interface.typepad.com/through_the_interface/2006/11/advanced_jiggin.html)
и до кучи http://forum.dwg.ru/showthread.php?t=115788
Название: Re: От полного нуля до ...
Отправлено: nolte от 01-09-2017, 14:16:54
Владимир Шу, спасибо все получилось.
Название: Re: От полного нуля до ...
Отправлено: Александр Ривилис от 01-09-2017, 14:35:23
nolte
В дальнейшем "Один вопрос - одна тема". Здесь уже каша из совершенно разных вопросов/тем.
Название: Re: От полного нуля до ...
Отправлено: Александр Ривилис от 02-09-2017, 19:08:53
Эту тему я закрываю, чтобы не было больше желания и возможности нарушать правила форума.