AutoCAD API Scale

Автор Тема: AutoCAD API Scale  (Прочитано 9151 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
AutoCAD API Scale
« : 23-09-2016, 21:10:29 »
Всем привет!
Такая ситуация. К примеру есть чертеж, в котором отрезок длиной 100 ед. (не важно метры, мм, дюймы).
Чтобы сделать отрезок в 50 ед., делаю так:

Код - vb.net [Выбрать]
  1. Entity.TransformBy(Matrix3d.Scaling(0.5, point3d(...)))

Но кроме примитивов нужно еще пройти и по таблице размерных стилей и поменять масштаб всем стилям. 
Может кроме размерных стилей еще кому-то нужно сделать scale?

Есть какая либо хорошая альтернатива в API AutoCAD,
которая грамотно сделает scale всему dwg-файлу?






Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: AutoCAD API Scale
« Ответ #1 : 23-09-2016, 21:39:29 »
Но кроме примитивов нужно еще пройти и по таблице размерных стилей и поменять масштаб всем стилям. 
Зачем? После того, как отрезок у тебя уменьшился в 2 раза какой размер у него должен быть? Остаться прежним или измениться в два раза?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: AutoCAD API Scale
« Ответ #2 : 23-09-2016, 22:08:48 »
какой размер у него должен быть?
Остаться прежним, а то получается как на картинке.



Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: AutoCAD API Scale
« Ответ #3 : 23-09-2016, 22:22:26 »
Ну тогда придётся обновлять размерные стили.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: AutoCAD API Scale
« Ответ #4 : 23-09-2016, 22:45:38 »
Ну тогда придётся обновлять размерные стили.
На сколько я понял - это специальная задачка и в стандартных
функциях AutoCAD такого быть не может
и нужно писать "плагинчик".

Отмечено как Решение Алексей (IdeaSoft) 24-09-2016, 03:58:16

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: AutoCAD API Scale
« Ответ #5 : 24-09-2016, 01:37:18 »
На сколько я понял - это специальная задачка и в стандартных
функциях AutoCAD такого быть не может
и нужно писать "плагинчик".
Этого я не понял. Вообще-то вопрос задан в разделе Программирование, что уже подразумевает написание "плагинчика". Можно конечно и "вручную" средствами AutoCAD без программирования отредактировать все размерные стили, выбрать все размеры и обновить их.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: AutoCAD API Scale
« Ответ #6 : 24-09-2016, 03:56:53 »
Вообще-то вопрос задан в разделе Программирование, что уже подразумевает написание "плагинчика"
Все верно ты говоришь! Цель моего вопроса состояла в том что бы выяснить что делать?
1) Писать программу
2) Не писать программу

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

Конечно пользователь все может сделать руками.
Но когда у пользователя несколько сотен таких файлов, задача
не решается не в один клик, пользователь может просто
забыть что-то сделать, то конечно программа будет ему в помощь.
 

Оффлайн Максим Маркевич

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Re: AutoCAD API Scale
« Ответ #7 : 24-09-2016, 15:44:55 »
Есть какая либо хорошая альтернатива в API AutoCAD,
которая грамотно сделает scale всему dwg-файлу?
Это ты, конечно, против логики системы пошел.  ;)
Остаться прежним, а то получается как на картинке.
Ты можешь не менять размерный стиль, а просто считывать значение размера в объекте до масштабирования, а потом это значение просто записывать в масштабируемый размер. Как я понял, концепции твоей это не помешает.
Каждый раз менять размерный стиль - это совсем неудобно и ненужно(ИМХО)!!!


Код - C# [Выбрать]
  1. using System;
  2. using AppServCore = Autodesk.AutoCAD.ApplicationServices.Core;
  3. using Autodesk.AutoCAD.Runtime;
  4. using Autodesk.AutoCAD.DatabaseServices;
  5. using Autodesk.AutoCAD.EditorInput;
  6. using Autodesk.AutoCAD.Geometry;
  7.  
  8. namespace Testing
  9. {
  10.     public class DimScale
  11.     {
  12.         [CommandMethod("DS")]
  13.         public static void DS()
  14.         {
  15.             var doc = AppServCore.Application.DocumentManager.MdiActiveDocument;
  16.             if (doc == null)
  17.                 return;
  18.             var db = doc.Database;
  19.             var ed = doc.Editor;
  20.             double value;
  21.             using (doc.LockDocument())
  22.             {
  23.                 using (var tr = db.TransactionManager.StartTransaction())
  24.                 {
  25.                     var pp1 = ed.GetPoint("Выберете опорную точку: ") as PromptPointResult;
  26.                     if (pp1.Status != PromptStatus.OK)
  27.                     {
  28.                         return;
  29.                     }
  30.                     var acSelSetPrompt = ed.GetSelection() as PromptSelectionResult;
  31.                     if (acSelSetPrompt.Status == PromptStatus.OK)
  32.                     {
  33.                         var acSSet = acSelSetPrompt.Value;
  34.                         foreach (SelectedObject acSelSetObj in acSSet)
  35.                         {
  36.                             if (acSelSetObj != null)
  37.                             {
  38.                                 var alignDim = tr.GetObject(acSelSetObj.ObjectId, OpenMode.ForWrite) as AlignedDimension;
  39.                                 if (alignDim != null)
  40.                                 {
  41.                                     value = Math.Round(alignDim.Measurement);
  42.                                     alignDim.DimensionText = Convert.ToString(value);
  43.                                 }
  44.                             }
  45.                         }
  46.                         foreach (SelectedObject acSelSetObj in acSSet)
  47.                         {
  48.                             if (acSelSetObj != null)
  49.                             {
  50.                                 var entity = tr.GetObject(acSelSetObj.ObjectId, OpenMode.ForWrite) as Entity;
  51.                                 if (entity != null)
  52.                                 {
  53.                                     entity.TransformBy(Matrix3d.Scaling(0.5, pp1.Value));
  54.                                 }
  55.                             }
  56.                         }
  57.                     }
  58.                     tr.Commit();
  59.                 }
  60.             }
  61.         }
  62.     }
  63. }

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: AutoCAD API Scale
« Ответ #8 : 24-09-2016, 18:34:12 »
Каждый раз менять размерный стиль - это совсем неудобно
Поменять размерный стиль нужно всего только один раз.
Так в основном эта проблема связана с исходными данными
Так сказать привел исходные данные в нужный вид и работай дальше.
Я еще на видео обратил внимание на то, что высота текста размерного
стиля остается прежней. А бываю случаи, когда исходные данные приходят в мм,
а их нужно перевести в метры, т.е. в 1000 раз уменьшить чертеж.
Уменьшить в раза это же я просто как пример показал.
При уменьшении чертежа в 1000 раз высота текста размеров
становятся просто огромными и закрывают чертеж.
   

Оффлайн Максим Маркевич

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Re: AutoCAD API Scale
« Ответ #9 : 24-09-2016, 20:29:49 »
Поменять размерный стиль нужно всего только один раз.
Да ладно? А потом при выполнении новых объектов они будут на измененном стиле, и его снова придется менять?
Я еще на видео обратил внимание на то, что высота текста размерного
стиля остается прежней. А бываю случаи, когда исходные данные приходят в мм,
а их нужно перевести в метры, т.е. в 1000 раз уменьшить чертеж.
Ну так завяжи в свойствах и высоту текста и размеры выносок. Все равно, это будет корректнее, чем менять размерный стиль. ИМХО.
У меня создается впечатление, что ты не совсем понимаешь суть работы со стилями в акаде.
Ведь ты пойми, если у тебя часть объектов нужно масштабировать, а часть нет, то те, которые не трогались, тоже полетят, потому что у них такой же стиль.
В общем, либо я тебя не понимаю, либо ты очень плохо пояснил свою задачу/выбрал плохой пример.