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

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

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

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

В nanoCAD используется система аннотативных масштабов, доступная через MultiCAD.NET API:

McObjectManager.CurrentStyle.Scale

Нужно включить в проект ссылку на mapimgd.dll.

AnnScale.png

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

Крыша поехала от обилия информации. 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 что-нибудь сваять? Никогда на Си не писал, можно привести пример изменения масштаба?

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

Что-то не получается с 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
Ссылка на сообщение
Поделиться на другие сайты

Что-то не получается с 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.

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

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

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

"Даже если вручную ставлю, к примеру, М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;
 }

Работает прекрасно.

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

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

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

Проблему выбора масштаба объектов или масштаба оформления решил с помощью McObjectManager.CurrentStyle.IsMeasurementScalingMode.

[CommandMethod("TestScl")]
    public void TestScl()
    {
	    McObjectManager.CurrentStyle.IsMeasurementScalingMode = false;
	    double ScaleDwg = McObjectManager.CurrentStyle.Scale;
	    ScaleDwg = .25;
	    McObjectManager.CurrentStyle.Scale = ScaleDwg;
    }

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

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

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

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

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

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

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

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

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

Загрузка...
  • Расскажите друзьям

    Нравится Официальный форум компании Нанософт? Расскажите друзьям!
  • Похожий контент

    • От Танюха
      Установлен стиль печати монохром, а на печать выходят цветные линии, что делать?
       
      Для того чтобы распечатать чертеж в монохроме ( черно-былым) необходимо чтобы цвета на чертеже были указаны в индексах. Если цвет задан RGB( 0,0,0), то СТВ-таблицы его не обрабатывают и на печать выходит цвет.
       
      Lisp "layers(1)"  производит автоматическую замену цвета слоя заданного в RGB на индексированный.
       
      Пример работы:
      1. Цвет слоя задан в RGB 
      2. Загрузить lisp
      3. После выполнения команды CHGTCL  в командной строке появится сообщение о заменённых цветах в слоях
      4. В Диалоге Слои цвет задан индексом
       
       
      layers (1).lsp
    • От doctorraz
      При обработке именованных ячеек, споткнулся об грабельки.
      Properties объектов СПДС имеют Names  обращаясь к которым можно получать свойства
      Это все красиво работает для стандартных и прочих объектов.
      У ячейки таблицы есть Properties : Names   которое задается, как комментарий ячейки.
      Пока комментарий текст, к этому свойству можно обратиться, но если комментарий число, возникает исключение:
      Index is an interger number from 1 upto Count.
      Собственно вопрос: как это обойти/объехать? Получить свойство с   Names  integer
      PS кстати, кто такой interger ?
       
      Баг с именем интегер.dwg
    • От doctorraz
      Вопрос такой образовался отчего у ни разу не сохранявшегося документа
      ThisDrawing.Name= ThisDrawing.FullName
      очевидно, что
      ThisDrawing.Name должно быть равно имени чертежа, а
      ThisDrawing.FullName пустое значение...
      офф блин косячите на ровном месте
       
    • От doctorraz
      в нано 21 по сравнению с прежней версией поправили
      ThisDrawing.SummaryInfo.GetCustomByKey Key1, strVal
      теперь оно вызывает исключение если такого ключа нет МОЛОДЦЫ!!!
      -----------------------
      а на SetCustomByKey  если нет такого ключа исключений не хватило?
      ThisDrawing.SummaryInfo.SetCustomByKey Key1, Value1
      зачем он создает ключ, когда должен устанавливать его значение, либо вызвать исключение "Ключ не найден"
      ---------------------
      AddCustomInfo  вообще эпик фэйл
      Key1="нанодев"
      Value1="косячат"
      ThisDrawing.SummaryInfo.AddCustomInfo Key1, Value1
      ThisDrawing.SummaryInfo.AddCustomInfo Key1, Value1
      ThisDrawing.SummaryInfo.AddCustomInfo Key1, Value1
      ThisDrawing.SummaryInfo.AddCustomInfo Key1, Value1
      Создаст столько одинаковых ключей, сколько будет вызовов, а должен бы вызвать исключение "дублирующийся ключ"
      Руками в нане пользовательские свойства прям чистый мед править)))
    • От Vozhich
      Есть программы которая считывает атрибуты блока и заполняет таблицу (например: общие данные).
      Случайно заметил глюк. При очередном открытии файла (после просмотра его автокадом) атрибуты блоков немного "поплыли".
      Помогает команда в командной строке "атробновить". Атрибуты в пространстве модели после этого выглядят нормально. Но программное чтение атрибута не видить его значения.
      При этом в свойствах блока значения атрибутов видно. Чтобы исправить ситуацию приходится ручками заходить в редактирование атрибута блока и не редактируя выйти.
      Что это может быть? и как избежать?
×
×
  • Создать...