Перейти к содержимому


Масштаб оформления

ActiveX LISP

Сообщений в теме: 9

#1 sandymen

    Посетитель

  • Пользователи
  • PipPip
  • 27 сообщений
  • Пол:Мужчина

Отправлено 30 Май 2014 - 17:17

Никак не могу сообразить как сабж установить программно. Допустим после установки nanoCAD по умолчанию в новом чертеже имеем 1:100. А если надо 2:1 или 1:1 ?
Если больше ничего не помогает - прочти инструкцию.

#2 ISL

    Клуб разработчиков

  • nanoSoft
  • PipPipPipPip
  • 364 сообщений
  • Пол:Мужчина
  • Город:Москва
  • Интересы:Разработка САПР

Отправлено 30 Май 2014 - 19:47

В nanoCAD используется система аннотативных масштабов, доступная через MultiCAD.NET API:
McObjectManager.CurrentStyle.Scale
Нужно включить в проект ссылку на mapimgd.dll.

Прикрепленные файлы

  • Прикрепленный файл  AnnScale.png   11,72К   5 Количество загрузок:

Пишешь приложения под САПР на С++, .NET, COM, Lisp? Вступай в Клуб разработчиков nanoCAD.

#3 sandymen

    Посетитель

  • Пользователи
  • PipPip
  • 27 сообщений
  • Пол:Мужчина

Отправлено 05 Июнь 2014 - 17:23

Крыша поехала от обилия информации. MultiCAD + .NET + Delphi + Microsoft Visual Studio. Делфи для .NET это плагин для MVS, и множество иных нюансов. Да и типа не всякий MVS для WinXP годен, опять же serial key найти нужно. Тупое конвертирование mcsAddin.h в mcsAddin.pas не канает, много дополнительных *.h подключено.

Блин, на LISP'е не получилось. Delphi & OLE тоже не помогло. В третий раз надо пробовать Автокадовский Лисп адаптировать под Нанокад. Це крик души, не обращать внимание.

Короче, вопрос. Сможет ли дельфиец, установивший Visual Studio Test Professional 2010, опираясь на nanoSDK что-нибудь сваять? Никогда на Си не писал, можно привести пример изменения масштаба?
Если больше ничего не помогает - прочти инструкцию.

#4 sandymen

    Посетитель

  • Пользователи
  • PipPip
  • 27 сообщений
  • Пол:Мужчина

Отправлено 26 Июнь 2014 - 11:32

Что-то не получается с McObjectManager.CurrentStyle.Scale. Кое-как скомпилировал библиотеку классов. При запуске всегда получаю Scale = 1. Даже если вручную ставлю, к примеру, М4:1.
namespace ClassLibrary1
{
	using System;
	using System.Collections.Generic;
	using System.Linq;
	using System.Text;
	using Teigha.DatabaseServices;
	using Teigha.Runtime;
	using Teigha.Geometry;
	using HostMgd.ApplicationServices;
	using HostMgd.EditorInput;
	using Platform = HostMgd;
	using PlatformDb = Teigha;
	using Multicad;
	using Multicad.DatabaseServices;
	public class Class1
	{
		[CommandMethod("Test")]
		public void Test()
		{
			string MessageString = "Попытка установки масштаба";
			Editor ed = Platform.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
			ed.WriteMessage(MessageString);
			double ScaleDwg = McObjectManager.CurrentStyle.Scale;
			ed.WriteMessage("Текущий масштаб: " + ScaleDwg);
			ScaleDwg = .25;
			McObjectManager.CurrentStyle.Scale = ScaleDwg;
			ed.WriteMessage("А сейчас масштаб: " + McObjectManager.CurrentStyle.Scale);
		}
	}
}

Сообщение отредактировал sandymen: 26 Июнь 2014 - 11:33

Если больше ничего не помогает - прочти инструкцию.

#5 Robink

    Активист

  • Пользователи
  • PipPipPipPip
  • 352 сообщений
  • Пол:Мужчина
  • Город:Казань
  • Интересы:САПРостроение

Отправлено 26 Июнь 2014 - 12:42

Просмотр сообщенияsandymen (26 Июнь 2014 - 11:32) писал:

Что-то не получается с McObjectManager.CurrentStyle.Scale. Кое-как скомпилировал библиотеку классов. При запуске всегда получаю Scale = 1. Даже если вручную ставлю, к примеру, М4:1.
namespace ClassLibrary1
{
	using System;
	using System.Collections.Generic;
	using System.Linq;
	using System.Text;
	using Teigha.DatabaseServices;
	using Teigha.Runtime;
	using Teigha.Geometry;
	using HostMgd.ApplicationServices;
	using HostMgd.EditorInput;
	using Platform = HostMgd;
	using PlatformDb = Teigha;
	using Multicad;
	using Multicad.DatabaseServices;
	public class Class1
	{
		[CommandMethod("Test")]
		public void Test()
		{
			string MessageString = "Попытка установки масштаба";
			Editor ed = Platform.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
			ed.WriteMessage(MessageString);
			double ScaleDwg = McObjectManager.CurrentStyle.Scale;
			ed.WriteMessage("Текущий масштаб: " + ScaleDwg);
			ScaleDwg = .25;
			McObjectManager.CurrentStyle.Scale = ScaleDwg;
			ed.WriteMessage("А сейчас масштаб: " + McObjectManager.CurrentStyle.Scale);
		}
	}
}
У меня такое подозрение, что значение обновляется, при добавлении хотя бы одного объекта. На .Net получаю тот же масштаб через db.Cannoscale.Scale. Работает, когда работаю над проектом. В пустом документе возвращает 1.

#6 Robink

    Активист

  • Пользователи
  • PipPipPipPip
  • 352 сообщений
  • Пол:Мужчина
  • Город:Казань
  • Интересы:САПРостроение

Отправлено 26 Июнь 2014 - 12:55

Сейчас попробовал. В пустом документе всегда 1, что только не делал. В другом документе всегда 0,02 (1:50). Поменять во втором так и не смог.

#7 macrodaemon

    Гуру MultiCAD API

  • nanoSoft
  • PipPip
  • 18 сообщений
  • Пол:Мужчина

Отправлено 26 Июнь 2014 - 12:56

"Даже если вручную ставлю, к примеру, М4:1."

У вас выполняется эта команда, вы в дебагере ставили там брекпоинт, заходит туда?

По идее в атрибуте у вас не хватает флага CommandFlags.NoCheck что бы команда успешно зарегистрировалась, и я бы рекомендовал вам назвать команду посложнее testScale например.

Вот вы написали M4:1 "M" - большое, вероятно вы выбрали машиностроительный режим нанокада?
Там где вы вручную задаете масштаб, в меню внизу галочка стоит у "Масштаб символов" или "Масштаб измерений" ?

В нанокаде 2 масштаба, масштаб элементов оформления и масштаб модели.

Концепция такова:
в машиностроительном обычно рисуют деталь в нужном масштабе, а элементы оформления - 1:1
в строительной области рисуют чертеж 1:1 а оформление делают в нужном масштабе.
Бывает используют оба одновременно, поэтому нужны оба отдельно.

Так вот:
McObjectManager.CurrentStyle.Scale - масштаб элементов оформления (например m100:1)
McObjectManager.CurrentStyle.MeasureScale - масштаб измерений. (например M4:1)

  [CommandMethod("TestScl", CommandFlags.NoCheck | CommandFlags.NoPrefix)]
  public void TestScl()
  {
   double ScaleDwg = McObjectManager.CurrentStyle.MeasureScale .Scale;
   ScaleDwg = .25;
   McObjectManager.CurrentStyle.Scale = ScaleDwg;
  }
Работает прекрасно.

#8 Robink

    Активист

  • Пользователи
  • PipPipPipPip
  • 352 сообщений
  • Пол:Мужчина
  • Город:Казань
  • Интересы:САПРостроение

Отправлено 26 Июнь 2014 - 13:01

Попробовал McObjectManager.CurrentStyle.Scale. У меня работает.

#9 sandymen

    Посетитель

  • Пользователи
  • PipPip
  • 27 сообщений
  • Пол:Мужчина

Отправлено 27 Июнь 2014 - 05:36

Уря-я. Работает. Действительно, мне необходимо было изменять масштаб оформления, а рисовать всегда 1:1. Но вопрос остался открытым. Если по умолчанию в наноКАДе будет стоять какой-либо масштаб объектов (с большой "М"), то код не работает.
Если больше ничего не помогает - прочти инструкцию.

#10 sandymen

    Посетитель

  • Пользователи
  • PipPip
  • 27 сообщений
  • Пол:Мужчина

Отправлено 27 Июнь 2014 - 06:10

Проблему выбора масштаба объектов или масштаба оформления решил с помощью McObjectManager.CurrentStyle.IsMeasurementScalingMode.
[CommandMethod("TestScl")]
	    public void TestScl()
	    {
		    McObjectManager.CurrentStyle.IsMeasurementScalingMode = false;
		    double ScaleDwg = McObjectManager.CurrentStyle.Scale;
		    ScaleDwg = .25;
		    McObjectManager.CurrentStyle.Scale = ScaleDwg;
	    }

Если больше ничего не помогает - прочти инструкцию.





Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 скрытых пользователей