Перейти к содержанию
CheerfulCoon

Первые шаги в мир программирования под nanoCAD

Рекомендуемые сообщения

Подскажите пожалуйста будет ли это реализовано в платформе в обозримом будущем?

 

 

post-64306-0-19947100-1516352714.png

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

поясню зачем это надо:

методом server.query невозможно получить коллекцию только "Универсальных маркеров", невозможно сделать выборку с определенных слоев

этот метод работает только на активном пространстве, т.е. с неактивной вкладки или документа коллекцию этим методом не получить.

все эти задачи и многие другие прекрасно решаются методом SelectionSets платформы, но в патформе не реализован механизм передачи указателя на объект между нанокад и МсСом

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

поясню зачем это надо:

методом server.query невозможно получить коллекцию только "Универсальных маркеров", невозможно сделать выборку с определенных слоев

этот метод работает только на активном пространстве, т.е. с неактивной вкладки или документа коллекцию этим методом не получить.

все эти задачи и многие другие прекрасно решаются методом SelectionSets платформы, но в патформе не реализован механизм передачи указателя на объект между нанокад и МсСом

За COM не знаю на .NET можно, через .ID.ToOldIdPtr() потом из него получить ObjectId, вот как получить handle в MC не нашел.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Этот код отрабатывает в AutoCad и не работает в NanoCAD (не реализовано)

 

 


Public ThisDrawing As Object
Sub method_not_implemented_under_this_platform()
Dim intType(0) As Integer '(2)
Dim varDat(0)  As Variant
Dim objSelSet  As Object
Dim objNanoCAD As Object
'<Сбор таблиц селсетом
   Set spds = CreateObject("McCOM2.Server")
On Error Resume Next
   Set objNanoCAD = GetObject(, "AutoCAD.Application")
   If Err.Number <> 0 Then
    Err.Number = 0
    Debug.Print Err.Number
    Set objNanoCAD = GetObject(, "NanoCAD.Application")
    If Err.Number <> 0 Then
	    MsgBox "Не запущен CAD"
	    Exit Sub
    End If
   End If
On Error GoTo 0
   Set ThisDrawing = objNanoCAD.ActiveDocument
   intType(0) = 0
   varDat(0) = "spdstable2" 'таблицы СПДС от 8,0 и младше, за СПДС 11, 12 не скажу _
   старые версии СПДС, старше 8,0 "spdstable"
   Set objSelSet = vbdPowerSet("seTEST")
   objSelSet.Select 5, , , intType, varDat
   Debug.Print "spdstable-" & objSelSet.Count
Dim objAK As Object
Dim ObjMC As Object
   For Each objAK In objSelSet
    Set ObjMC = spds.Object(objAK) 'имеем полный доступ к свойствам СПДС в АК но в нане "method not implemented under this platform"
    namee = ObjMC("Name")
   'или
    nameeee = ObjMC!Name
    Debug.Print "Имя таблицы-" & namee
   'работаем с ним дальше
   Next
End Sub
Public Function vbdPowerSet(strName As String) As Object 'AcadSelectionSet
Dim objSelSet As Object ' AcadSelectionSet
Dim objSelCol As Object ' AcadSelectionSets
   Set objSelCol = ThisDrawing.SelectionSets
   For Each objSelSet In objSelCol
    If objSelSet.Name = strName Then
	    objSelSet.Delete
	    Exit For
    End If
   Next
   Set objSelSet = ThisDrawing.SelectionSets.Add(strName)
   Set vbdPowerSet = objSelSet
End Function

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте!

Переходим всей организацией на нанокад. В связи с чем возникает несколько вопросов.

В принципе функционал "Геоники" устраивает, но остались достаточно нужные полезные лиспы с автокадовских времен (корректно работают под версии 2004, 2007, 2010 но уже не все)

В нанокаде не работает полноценно никакой из них. например функция не определена ENAME , MODES,ошибка в функции *error* наверная функция и тому подобное.

Насколько я смог узнать не все лисп функции автокада есть в нанокаде. Проблема в этом?

 

Либо я что то не подгрузил. Например согласно учебнику Н.Полещука в автокаде для работы грузятся функции activX

Вот такой код предшествует подгрузке других лиспов при работе в автокад.

 

;***БАЗОВАЯ ФУНКЦИЯ ДОСТУПА К ТЕХНОЛОГИИ ActiveX

; Глобальные переменные:

; acad_application-указатель корневого объекта иерархии AutoCAD

; active_document-указатель открытого документа

; model_space-указатель пространства модели рисунка

; paper_space-указатель пространства листа документа

(DEFUN begin_actvex ( /)

(vl-load-com)

(setq acad_application(VLAX-GET-ACAD-OBJECT))

(setq active_document(VLA-GET-ACTIVEDOCUMENT acad_application))

(setq model_space(vla-get-modelspace active_document))

(setq paper_space(vla-get-paperspace active_document))

);end

;---------

 

(begin_actvex )

 

Нужен ли код подобного плана для нанокад?

Либо подгрузка библиотек каких либо?

Или может проще эти лиспы переписать под с++? он более функционален? и в принципе как выбрать язык под себя и свои задачи?

Нанокад версии 8.5

 

P.S. Не программист (но ручки тянутся разбираться), новичок, энтузиаст.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Насколько я смог узнать не все лисп функции автокада есть в нанокаде. Проблема в этом?

не все. от версии к версии поддержка LISP растет.

Или может проще эти лиспы переписать под с++? он более функционален? и в принципе как выбрать язык под себя и свои задачи?

по этому куску вырванного из контекста, не понятно, что там проще или сложнее.

по языкам ИМХО:

LISP - кроме автокад/нанокад, почти нигде не понадобиться. и поддержка в нано его насколько понимаю, еще далека от автокад.для староверов и любителей функционального программирования.

Jscript/vbscript - весело и просто. для начинающих норм. не все есть правда. для небольших скриптов и быстрого прототипирования.

C#/MultiCAD/.NET - серъезный инструмент с большими возможностями. порог входа - выше чем в предыдущем. Для полноценных приложений.

C++ - this party is hard. планируете разрабатывать высокопроизводительные промышленные приложения? - Вам сюда. Высокий порог входа. для настоящих джедаев.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо за ответ, стало понятнее в какую сторону смотреть! Судя по всему на с++ замахиватся не стоит.

 

Однако про входной лисп (по аналогии с тем что был в сообщении выше) вопрос остался открыт. Нужен ли он в подобном виде для нано?Или все должно работать так?

Лисперы отзовитесь=)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если у кого-то есть в электроннном виде книги по программированию до Windows CE или по программированию под Windows с использованием MFC, поделитесь, пожалуйста.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если у кого-то есть в электроннном виде книги по программированию до Windows CE или по программированию под Windows с использованием MFC, поделитесь, пожалуйста.

здесь как бы форум совсем не про форум. литературы по общесистемному программированию, огромное кол-во в т.ч. в свободном доступе.

так что чем могу, полезная ссылка ниже)

 

_http://g.zeos.in/?q=Windows%20CE%20programming%20books

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добрые люди, есть ли у кого програмка под нано или лисп для объединения штриховок?

Нашёл пару лиспиков в сети, но нано их не хочет запускать корректно.

Пользуюсь Нанокад СПДС 6.0

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

всем доброе утро. никогда ранее не делал ничего под нано-кад, да и сам продукт увидел впервые два дня назад. но интерес есть. хочу попробовать. с чего начать? есть: сам нано-кад, МС вижуал студия 2017, опыт написания .NET сборок для автокада, опыт работы с ObjectARX. как оказалось этого мало. даже начать не могу. код для автокада тут не работает.

помогите с быстрым стартом плиз.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

помогите с быстрым стартом плиз.

Для начало можете изучить эти посты

https://habr.com/ru/search/?q=%5BMultiCAD%5D&target_type=posts

Сам по ним изучал

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

спасибо, это уже неплохо для начала. но все же, а есть какое-то централизованное описалово по multicad,.net? это же не секретный продукт.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть SDK, его можно получить, зарегистрировавшись в Клубе разработчиков. Там же можно получить бессрочную лицензию для разработки на 3 машины.

В SDK есть скромные примеры на всех поддерживаемых языках.

Изменено пользователем Kreator

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вот это уже дело. попробую. хотя довольно странно, что SDK распространяется на таких странных условиях.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а можно сюда как-то выложить хотя бы help по multicad.net AIP? хотя бы видеть какие классы за что отвечают.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А в чём трудности скачать всё? Справка не исчерпывающая, на ней одной не напишете, скорее всего.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если есть опыт писания под AutoCad то трудностей быть не должно. Расположение/назначение классов, методов и т. д. очень схожи.

 

Ниже инфа от 2014 года, но возможно еще актуальна:

Здесь я писал где я искал инфу (в том числе SDK который устанавливается на ПК + доступен на фопуме разработчиков)

http://forum.nanocad...indpost&p=28401

 

Даю для примера куски кода на C# (код не идеален, но для примера думаю сойдет)

подключения к нанокаду

		/// <summary> запуск и связь с Nanocad
		///
		/// </summary>
		/// <returns></returns>
		public static nanoCAD.Application nanocad_service_run()
		{
			nanoCAD.Application nc_app = null;
			try
			{
				object processSW = System.Activator.CreateInstance(System.Type.GetTypeFromProgID("NanoCad.Application"));
				nc_app = (nanoCAD.Application)processSW;
			}
			catch
			{
				nc_app = new nanoCAD.Application();
			}
			if (nc_app.Documents.Count == 0)
			{
				nc_app.Documents.Add(@"c:\Program Files (x86)\Nanosoft\nanoCAD en 5.0\UserDataCache\Templates\Default.dwt");
			}
			return nc_app;
		}

 

Контур форматки А4 на активном документе

	    /// <summary> контур А4 на активном документе
		///
		/// </summary>
		public static void nanocad_risuem_A4_kontur(nanoCAD.Application nc_app)
		{
			double[] point1 = { 0, 0, 0 }, point2 = { 0, 297, 0 }, point3 = { 210, 297, 0 }, point4 = { 210, 0, 0 };
			double[] point10 = { 20, 5, 0 }, point20 = { 20, 297 - 5, 0 }, point30 = { 210 - 5, 297 - 5, 0 }, point40 = { 210 - 5, 5, 0 };
			OdaX.AcadLine default_line = nc_app.ActiveDocument.ModelSpace.AddLine(point1, point2); default_line.LinetypeScale = 1; default_line.Lineweight = OdaX.ACAD_LWEIGHT.acLnWt000; default_line.Linetype = nc_app.ActiveDocument.Linetypes.Item(2).Name;
			default_line = nc_app.ActiveDocument.ModelSpace.AddLine(point2, point3); default_line.LinetypeScale = 1; default_line.Lineweight = OdaX.ACAD_LWEIGHT.acLnWt000; default_line.Linetype = nc_app.ActiveDocument.Linetypes.Item(2).Name;
			default_line = nc_app.ActiveDocument.ModelSpace.AddLine(point3, point4); default_line.LinetypeScale = 1; default_line.Lineweight = OdaX.ACAD_LWEIGHT.acLnWt000; default_line.Linetype = nc_app.ActiveDocument.Linetypes.Item(2).Name;
			default_line = nc_app.ActiveDocument.ModelSpace.AddLine(point4, point1); default_line.LinetypeScale = 1; default_line.Lineweight = OdaX.ACAD_LWEIGHT.acLnWt000; default_line.Linetype = nc_app.ActiveDocument.Linetypes.Item(2).Name;
			default_line = nc_app.ActiveDocument.ModelSpace.AddLine(point10, point20); default_line.LinetypeScale = 1; default_line.Lineweight = OdaX.ACAD_LWEIGHT.acLnWt030; default_line.Linetype = nc_app.ActiveDocument.Linetypes.Item(2).Name;
			default_line = nc_app.ActiveDocument.ModelSpace.AddLine(point20, point30); default_line.LinetypeScale = 1; default_line.Lineweight = OdaX.ACAD_LWEIGHT.acLnWt030; default_line.Linetype = nc_app.ActiveDocument.Linetypes.Item(2).Name;
			default_line = nc_app.ActiveDocument.ModelSpace.AddLine(point30, point40); default_line.LinetypeScale = 1; default_line.Lineweight = OdaX.ACAD_LWEIGHT.acLnWt030; default_line.Linetype = nc_app.ActiveDocument.Linetypes.Item(2).Name;
			default_line = nc_app.ActiveDocument.ModelSpace.AddLine(point40, point10); default_line.LinetypeScale = 1; default_line.Lineweight = OdaX.ACAD_LWEIGHT.acLnWt030; default_line.Linetype = nc_app.ActiveDocument.Linetypes.Item(2).Name;
		}

Изменено пользователем Александр_

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вот это уже что-то, спасибо. но больше интересует создание .NET DLL для загрузки из самого ПО. кое что уже получилось... но сюда даже код не могу вставить, странный интерфэйсл у форума....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

для начала, хотя бы, какие DLL подключать к сборке? видел ряд примеров, подключают файлы host* и mapi*. Там типа два фреймвока? Teigha и Multicad? по крайней мере вижу два namespace.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

но сюда даже код не могу вставить, странный интерфэйсл у форума....

Почему же нельзя? Вон сверху кнопочка Код, а в спойле можно спрятать тэгом [ spoiler ] [ / spoiler ]

 

 

using Something;
HelloWorld();

 

 

 

для начала, хотя бы, какие DLL подключать к сборке? видел ряд примеров, подключают файлы host* и mapi*. Там типа два фреймвока? Teigha и Multicad? по крайней мере вижу два namespace.

Для начала, откройте любой пример из входящих в состав, посмотрите, что там и как. У меня подключены mapi*, host* мне не нужен :) Да, mapi - Multicad API.

 

вот это уже что-то, спасибо. но больше интересует создание .NET DLL для загрузки из самого ПО. кое что уже получилось

Что имеете в виду? По результату получается DLL, которую можно загрузить в NC командой NETLOAD или прописать в автозагрузку. DLL должна быть на локальном диске - на всякий случай.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

у меня есть некоторые проблемы скачать SDK. ну и соответственно примеров нет. можете список DLL дать которые подключаем для MultiCAD и отдельно который для Teigha? эти фреймвоки взаимозаменяемы?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

у меня есть некоторые проблемы скачать SDK. ну и соответственно примеров нет. можете список DLL дать которые подключаем для MultiCAD и отдельно который для Teigha? эти фреймвоки взаимозаменяемы?

 

Это разные API, хотя много в чем пересекаются. MultiCAD более высокоуроневое API как я понимаю. на нем быстрее писать , некоторые задачи.

 

MultiCAD:

- mapimgd.dll,

- mapibasetypes.dll

Teiga:

- hostmgd.dll

- hostdbmgd.dll

 

может это будет полезным комментарием.

_https://habr.com/ru/company/nanosoft/blog/184482/#comment_6468390

 

P.S. Кто бы написал статью про API , чего там откуда наследуюется и чего под капотом и какие API есть в nanoCAD и чем они отличаются. сходу действительно не очень то понятно.

Изменено пользователем Ivanco

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну ладно мультикад это российская разработка, нет документации, не могу это понять, но могу это простить. но тейга то!? это же вполне отдельный продукт! нету доки?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вроде как с тайгой освоился. namespace отличаются, а в остальном, копия autocad.net API.

вот такой фрагмент заработал:

using System;

using Teigha.DatabaseServices;

using Teigha.Runtime;

using Teigha.Geometry;

using HostMgd.ApplicationServices;

class c1

{

static Action<string> wl = Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage;

static Database b = HostApplicationServices.WorkingDatabase;

[CommandMethod("q1")]

static public void q1()

{

Application.ShowAlertDialog("677");

wl("start");

var pl = new Polyline();

pl.AddVertexAt(0, new Point2d(0, 0), 0, 1, 1);

pl.AddVertexAt(1, new Point2d(100, 0), 0, 1, 1);

pl.AddVertexAt(1, new Point2d(100, 100), 0, 1, 1);

using (var t = b.TransactionManager.StartTransaction())

{

(b.CurrentSpaceId.GetObject(OpenMode.ForWrite) as BlockTableRecord).AppendEntity(pl);

t.AddNewlyCreatedDBObject(pl, true);

t.Commit();

}

wl("finish");

}

}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...

×
×
  • Создать...