sandymen Posted May 30, 2014 Report Share Posted May 30, 2014 Никак не могу сообразить как сабж установить программно. Допустим после установки nanoCAD по умолчанию в новом чертеже имеем 1:100. А если надо 2:1 или 1:1 ? Quote Link to comment Share on other sites More sharing options...
ISL Posted May 30, 2014 Report Share Posted May 30, 2014 В nanoCAD используется система аннотативных масштабов, доступная через MultiCAD.NET API: McObjectManager.CurrentStyle.Scale Нужно включить в проект ссылку на mapimgd.dll. Quote Link to comment Share on other sites More sharing options...
sandymen Posted June 5, 2014 Author Report Share Posted June 5, 2014 Крыша поехала от обилия информации. 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 что-нибудь сваять? Никогда на Си не писал, можно привести пример изменения масштаба? Quote Link to comment Share on other sites More sharing options...
sandymen Posted June 26, 2014 Author Report Share Posted June 26, 2014 (edited) Что-то не получается с 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); } } } Edited June 26, 2014 by sandymen Quote Link to comment Share on other sites More sharing options...
Robink Posted June 26, 2014 Report Share Posted June 26, 2014 Что-то не получается с 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. Quote Link to comment Share on other sites More sharing options...
Robink Posted June 26, 2014 Report Share Posted June 26, 2014 Сейчас попробовал. В пустом документе всегда 1, что только не делал. В другом документе всегда 0,02 (1:50). Поменять во втором так и не смог. Quote Link to comment Share on other sites More sharing options...
macrodaemon Posted June 26, 2014 Report Share Posted June 26, 2014 "Даже если вручную ставлю, к примеру, М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; } Работает прекрасно. Quote Link to comment Share on other sites More sharing options...
Robink Posted June 26, 2014 Report Share Posted June 26, 2014 Попробовал McObjectManager.CurrentStyle.Scale. У меня работает. Quote Link to comment Share on other sites More sharing options...
sandymen Posted June 27, 2014 Author Report Share Posted June 27, 2014 Уря-я. Работает. Действительно, мне необходимо было изменять масштаб оформления, а рисовать всегда 1:1. Но вопрос остался открытым. Если по умолчанию в наноКАДе будет стоять какой-либо масштаб объектов (с большой "М"), то код не работает. Quote Link to comment Share on other sites More sharing options...
sandymen Posted June 27, 2014 Author Report Share Posted June 27, 2014 Проблему выбора масштаба объектов или масштаба оформления решил с помощью McObjectManager.CurrentStyle.IsMeasurementScalingMode. [CommandMethod("TestScl")] public void TestScl() { McObjectManager.CurrentStyle.IsMeasurementScalingMode = false; double ScaleDwg = McObjectManager.CurrentStyle.Scale; ScaleDwg = .25; McObjectManager.CurrentStyle.Scale = ScaleDwg; } Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.