ADN Club > Civil 3D API

Изменение параметров чертежа

(1/3) > >>

Georg:
Добрый день!
Появился вопрос, каким образом можно сформировать транзакцию для изменения параметров чертежа? Видел тут такой пример https://adn-cis.org/parametryi-chertezha-dwg.html, но хочу повторить это на C#. 


--- Код - C# [Выбрать] ---using Autodesk.Civil.ApplicationServices;using Autodesk.AutoCAD.ApplicationServices;using Autodesk.AutoCAD.DatabaseServices;namespace Civil3D_DrawingProperties{   public class C3D_Extensions_Terno   {         //Нод для смены системы единиц на метрическую      public static void ChangeDrawingUnitsToMeters(bool condition_meters)      {         //На вход подается условие - нужны ли метр, если false - то работает данный метод (if далее)         Document m_Doc = Application.DocumentManager.MdiActiveDocument;         Database db = m_Doc.Database;         //Они сами по себе, а строки ниже - сами по себе, это верно?!          CivilDocument c3d_doc = Autodesk.Civil.ApplicationServices.CivilApplication.ActiveDocument;         var Units_Window = c3d_doc.Settings.DrawingSettings;          //Инициация изменяемых переменных         var _DrawingUnits = Units_Window.UnitZoneSettings.DrawingUnits;         var _AngularUnits = Units_Window.UnitZoneSettings.AngularUnits;         var _ImperialToMetricConversion = Units_Window.UnitZoneSettings.ImperialToMetricConversion;         var _ScaleObjectsFromOtherDrawings = Units_Window.UnitZoneSettings.ScaleObjectsFromOtherDrawings;         var _MatchAutoCADVariables = Units_Window.UnitZoneSettings.MatchAutoCADVariables;         var _DrawingScale = Units_Window.UnitZoneSettings.DrawingScale;         var _DrivingDirection = Units_Window.AmbientSettings.General.DrivingDirection.Value;         var _Time = Units_Window.AmbientSettings.Time.Unit.Value;         var _Distance = Units_Window.AmbientSettings.Distance.Unit.Value;         var _Dimension = Units_Window.AmbientSettings.Dimension.Unit.Value;         var _Coordinate = Units_Window.AmbientSettings.Coordinate.Unit.Value;         var _GridCoordinate = Units_Window.AmbientSettings.GridCoordinate.Unit.Value;         var _Elevation = Units_Window.AmbientSettings.Elevation.Unit.Value;         var _Area = Units_Window.AmbientSettings.Area.Unit.Value;         var _Volume = Units_Window.AmbientSettings.Volume.Unit.Value;         var _Speed = Units_Window.AmbientSettings.Speed.Unit.Value;         var _Angle = Units_Window.AmbientSettings.Angle.Unit.Value;         var _Direction = Units_Window.AmbientSettings.Direction.Unit.Value;         var _LatLong = Units_Window.AmbientSettings.LatLong.Unit.Value;         var _Grade = Units_Window.AmbientSettings.Grade.Format.Value;         var _Slope = Units_Window.AmbientSettings.Slope.Format.Value;         var _GradeSlope = Units_Window.AmbientSettings.GradeSlope.Format.Value;         var _Station = Units_Window.AmbientSettings.Station.Unit.Value;         var _Acceleration = Units_Window.AmbientSettings.Acceleration.Unit.Value;         var _Pressure = Units_Window.AmbientSettings.Pressure.Unit.Value;          if (condition_meters == false)         {            //using (Transaction m_Tr = db.TransactionManager.StartTransaction()) //            using (Transaction tr = db.TransactionManager.StartTransaction())            {                _DrawingUnits = Autodesk.Civil.Settings.DrawingUnitType.Meters; //2               _AngularUnits = Autodesk.Civil.AngleUnitType.Degree; //179               _ImperialToMetricConversion = Autodesk.Civil.Settings.ImperialToMetricConversionType.InternationalFoot; //536870912;               _ScaleObjectsFromOtherDrawings = true;               _MatchAutoCADVariables = true;               _DrawingScale = Units_Window.UnitZoneSettings.DrawingScale = 1;// 1.0;               _DrivingDirection = Autodesk.Civil.DrivingDirectionType.RightSideOfTheRoad;// 0;               _Time = Autodesk.Civil.TimeUnitType.Minute;//301;               _Distance = Autodesk.Civil.LinearUnitType.Meter;// 2;               _Dimension = Autodesk.Civil.LinearUnitType.Meter;// 2;               _Coordinate = Autodesk.Civil.LinearUnitType.Meter;// 2;               _GridCoordinate = Autodesk.Civil.LinearUnitType.Meter; // 2;               _Elevation = Autodesk.Civil.LinearUnitType.Meter; // 2;               _Area = Autodesk.Civil.AreaUnitType.SquareMeter; //55;               _Volume = Autodesk.Civil.VolumeUnitType.CubicMeter;// 96;               _Speed = Autodesk.Civil.SpeedUnitType.KilometerPerHour;// 190;               _Angle = Autodesk.Civil.AngleUnitType.Degree;// 179;               _Direction = Autodesk.Civil.AngleUnitType.Degree;// 179;               _LatLong = Autodesk.Civil.AngleUnitType.Degree;// 179;               _Grade = Autodesk.Civil.GradeFormatType.Decimal;// 2468;               _Slope = Autodesk.Civil.SlopeFormatType.RiseRun;// 2465;               _GradeSlope = Autodesk.Civil.GradeSlopeFormatType.Decimal;// 2468;               _Station = Autodesk.Civil.LinearUnitType.Meter;// 2;               _Acceleration = Autodesk.Civil.AccelerationUnitType.MeterPerSecSquared;// 202;               _Pressure = Autodesk.Civil.PressureUnitType.Kilopascal;// 240;               tr.Commit();            }         }         else         {            using (Transaction tr = db.TransactionManager.StartTransaction())            {               _DrawingUnits = Autodesk.Civil.Settings.DrawingUnitType.Feet; //30               _AngularUnits = Autodesk.Civil.AngleUnitType.Degree; //179               _ImperialToMetricConversion = Autodesk.Civil.Settings.ImperialToMetricConversionType.InternationalFoot; //536870912;               _ScaleObjectsFromOtherDrawings = false;               _MatchAutoCADVariables = false;               _DrawingScale = Units_Window.UnitZoneSettings.DrawingScale = 1;// 1.0;               _DrivingDirection = Autodesk.Civil.DrivingDirectionType.RightSideOfTheRoad;// 0;               _Time = Autodesk.Civil.TimeUnitType.Minute;//301;               _Distance = Autodesk.Civil.LinearUnitType.Foot;// 30;               _Dimension = Autodesk.Civil.LinearUnitType.Inch;// 31;               _Coordinate = Autodesk.Civil.LinearUnitType.Foot;// 30;               _GridCoordinate = Autodesk.Civil.LinearUnitType.Foot;// 30;               _Elevation = Autodesk.Civil.LinearUnitType.Foot;// 30;               _Area = Autodesk.Civil.AreaUnitType.SquareFoot; //56;               _Volume = Autodesk.Civil.VolumeUnitType.CubicYard;// 153;               _Speed = Autodesk.Civil.SpeedUnitType.MilePerHour;// 196;               _Angle = Autodesk.Civil.AngleUnitType.Degree;// 179;               _Direction = Autodesk.Civil.AngleUnitType.Degree;// 179;               _LatLong = Autodesk.Civil.AngleUnitType.Degree;// 179;               _Grade = Autodesk.Civil.GradeFormatType.Percent;// 2467;               _Slope = Autodesk.Civil.SlopeFormatType.RunRise;// 2466;               _GradeSlope = Autodesk.Civil.GradeSlopeFormatType.Percent;// 2467;               _Station = Autodesk.Civil.LinearUnitType.Foot;// 2;               _Acceleration = Autodesk.Civil.AccelerationUnitType.FootPerSecSquared;// 203;               _Pressure = Autodesk.Civil.PressureUnitType.PoundPerSquareInch;// 242;               tr.Commit();            }         }               }   }}Собственно, как я понял параметры чертежа берутся из конструкции

--- Код - C# [Выбрать] ---         CivilDocument c3d_doc = Autodesk.Civil.ApplicationServices.CivilApplication.ActiveDocument;         var Units_Window = c3d_doc.Settings.DrawingSettings;
А стандартное обращение к чертежу здесь получается что-ли не к месту (кроме транзакции которая делается через Database)


--- Код - C# [Выбрать] ---         Document m_Doc = Application.DocumentManager.MdiActiveDocument;         Database db = m_Doc.Database;
Такое дело возвращает собственно "ноль" при выполнении его в среде Dynamo:

Примечание: Входное условие "bool condition_meters" нужно для логичного вписывания метода в структуру Dynamo
Ниже, собственно, другой метод который получает этот параметр:

--- Код - C# [Выбрать] ---      public static bool CheckDrawingUnitsToEqualMeter(string Project_Units_str)      {         bool condition_meters;         if (Project_Units_str == "Feet") condition_meters = false;         else condition_meters = true;         return condition_meters;      }


Александр Ривилис:
Georg,
Пять раз перечитал, но так и не понял в чем вопрос.

Georg:
Тогда, сформулирую проще - как сделать так, чтобы метод работал?
Чтобы изменения сделанные в теле IF записывались в чертеж?

И корректно ли вообще переназначать так значения системных параметров чертежа - сомнения мучают ... смотреть через Units_Window.UnitZoneSettings..., а менять через Autodesk.Civil.Settings

Александр Ривилис:

--- Цитата: Georg от 04-11-2020, 17:06:21 ---_DrawingUnits = Autodesk.Civil.Settings.DrawingUnitType.Feet; //30
--- Конец цитаты ---
Вместо

--- Код - C# [Выбрать] ---_DrawingUnits = Autodesk.Civil.Settings.DrawingUnitType.Feet; //30должно быть

--- Код - C# [Выбрать] ---Units_Window.UnitZoneSettings.DrawingUnits = Autodesk.Civil.Settings.DrawingUnitType.Feet; //30Ну и так далее. Ты же в своём коде просто меняешь значения переменных, а не свойства чертежа.

Georg:
Спасибо!
Да, проверил, работает теперь.  Я, получается, лишь считывал значения системных параметров в переменные, которым менял значения а обратно не возвращал.
Есть еще пара вопросов по данной теме (хоть это и отходит от концепции "1 вопрос - одна тема"
1. Можно ли как-то оптимизировать (сократить) не используя в "да" и "нет" повторного вызова функций?


--- Код - C# [Выбрать] ---if (condition_meters == false)                        {                                using (Transaction tr = db.TransactionManager.StartTransaction())                                {                                         Units_Window.UnitZoneSettings.DrawingUnits = Autodesk.Civil.Settings.DrawingUnitType.Meters; //2                                        Units_Window.UnitZoneSettings.AngularUnits = Autodesk.Civil.AngleUnitType.Degree; //179                                        Units_Window.UnitZoneSettings.ImperialToMetricConversion = Autodesk.Civil.Settings.ImperialToMetricConversionType.InternationalFoot; //536870912;                                        Units_Window.UnitZoneSettings.ScaleObjectsFromOtherDrawings = true;                                        Units_Window.UnitZoneSettings.MatchAutoCADVariables = true;                                        Units_Window.UnitZoneSettings.DrawingScale = 1.0;// 1.0                                        Units_Window.AmbientSettings.General.DrivingDirection.Value = Autodesk.Civil.DrivingDirectionType.RightSideOfTheRoad;// 0;                                        Units_Window.AmbientSettings.Time.Unit.Value = Autodesk.Civil.TimeUnitType.Minute;//301;                                        Units_Window.AmbientSettings.Distance.Unit.Value = Autodesk.Civil.LinearUnitType.Meter;// 2;                                        Units_Window.AmbientSettings.Dimension.Unit.Value = Autodesk.Civil.LinearUnitType.Meter;// 2;                                        Units_Window.AmbientSettings.Coordinate.Unit.Value = Autodesk.Civil.LinearUnitType.Meter;// 2;                                        Units_Window.AmbientSettings.GridCoordinate.Unit.Value = Autodesk.Civil.LinearUnitType.Meter; // 2;                                        Units_Window.AmbientSettings.Elevation.Unit.Value = Autodesk.Civil.LinearUnitType.Meter; // 2;                                        Units_Window.AmbientSettings.Area.Unit.Value = Autodesk.Civil.AreaUnitType.SquareMeter; //55;                                        Units_Window.AmbientSettings.Volume.Unit.Value = Autodesk.Civil.VolumeUnitType.CubicMeter;// 96;                                        Units_Window.AmbientSettings.Speed.Unit.Value = Autodesk.Civil.SpeedUnitType.KilometerPerHour;// 190;                                        Units_Window.AmbientSettings.Angle.Unit.Value = Autodesk.Civil.AngleUnitType.Degree;// 179;                                        Units_Window.AmbientSettings.Direction.Unit.Value = Autodesk.Civil.AngleUnitType.Degree;// 179;                                        Units_Window.AmbientSettings.LatLong.Unit.Value = Autodesk.Civil.AngleUnitType.Degree;// 179;                                        Units_Window.AmbientSettings.Grade.Format.Value = Autodesk.Civil.GradeFormatType.Decimal;// 2468;                                        Units_Window.AmbientSettings.Slope.Format.Value = Autodesk.Civil.SlopeFormatType.RiseRun;// 2465;                                        Units_Window.AmbientSettings.GradeSlope.Format.Value = Autodesk.Civil.GradeSlopeFormatType.Decimal;// 2468;                                        Units_Window.AmbientSettings.Station.Unit.Value = Autodesk.Civil.LinearUnitType.Meter;// 2;                                        Units_Window.AmbientSettings.Acceleration.Unit.Value = Autodesk.Civil.AccelerationUnitType.MeterPerSecSquared;// 202;                                        Units_Window.AmbientSettings.Pressure.Unit.Value = Autodesk.Civil.PressureUnitType.Kilopascal;// 240;                                        tr.Commit();                                }                        }                        else                        {                                using (Transaction tr = db.TransactionManager.StartTransaction())                                {                                        Units_Window.UnitZoneSettings.DrawingUnits = Autodesk.Civil.Settings.DrawingUnitType.Feet; //30                                        Units_Window.UnitZoneSettings.AngularUnits = Autodesk.Civil.AngleUnitType.Degree; //179                                        Units_Window.UnitZoneSettings.ImperialToMetricConversion = Autodesk.Civil.Settings.ImperialToMetricConversionType.InternationalFoot; //536870912;                                        Units_Window.UnitZoneSettings.ScaleObjectsFromOtherDrawings = false;                                        Units_Window.UnitZoneSettings.MatchAutoCADVariables = false;                                        Units_Window.UnitZoneSettings.DrawingScale = 1.0;// 1.0; ???                                        Units_Window.AmbientSettings.General.DrivingDirection.Value = Autodesk.Civil.DrivingDirectionType.RightSideOfTheRoad;// 0;                                        Units_Window.AmbientSettings.Time.Unit.Value = Autodesk.Civil.TimeUnitType.Minute;//301;                                        Units_Window.AmbientSettings.Distance.Unit.Value = Autodesk.Civil.LinearUnitType.Foot;// 30;                                        Units_Window.AmbientSettings.Dimension.Unit.Value = Autodesk.Civil.LinearUnitType.Inch;// 31;                                        Units_Window.AmbientSettings.Coordinate.Unit.Value = Autodesk.Civil.LinearUnitType.Foot;// 30;                                        Units_Window.AmbientSettings.GridCoordinate.Unit.Value = Autodesk.Civil.LinearUnitType.Foot;// 30;                                        Units_Window.AmbientSettings.Elevation.Unit.Value = Autodesk.Civil.LinearUnitType.Foot;// 30;                                        Units_Window.AmbientSettings.Area.Unit.Value = Autodesk.Civil.AreaUnitType.SquareFoot; //56;                                        Units_Window.AmbientSettings.Volume.Unit.Value = Autodesk.Civil.VolumeUnitType.CubicYard;// 153;                                        Units_Window.AmbientSettings.Speed.Unit.Value = Autodesk.Civil.SpeedUnitType.MilePerHour;// 196;                                        Units_Window.AmbientSettings.Angle.Unit.Value = Autodesk.Civil.AngleUnitType.Degree;// 179;                                        Units_Window.AmbientSettings.Direction.Unit.Value = Autodesk.Civil.AngleUnitType.Degree;// 179;                                        Units_Window.AmbientSettings.LatLong.Unit.Value = Autodesk.Civil.AngleUnitType.Degree;// 179;                                        Units_Window.AmbientSettings.Grade.Format.Value = Autodesk.Civil.GradeFormatType.Percent;// 2467;                                        Units_Window.AmbientSettings.Slope.Format.Value = Autodesk.Civil.SlopeFormatType.RunRise;// 2466;                                        Units_Window.AmbientSettings.GradeSlope.Format.Value = Autodesk.Civil.GradeSlopeFormatType.Percent;// 2467;                                        Units_Window.AmbientSettings.Station.Unit.Value = Autodesk.Civil.LinearUnitType.Foot;// 2;                                        Units_Window.AmbientSettings.Acceleration.Unit.Value = Autodesk.Civil.AccelerationUnitType.FootPerSecSquared;// 203;                                        Units_Window.AmbientSettings.Pressure.Unit.Value = Autodesk.Civil.PressureUnitType.PoundPerSquareInch;// 242;                                        tr.Commit();                                }Возможно, за это отвечает структура "this"? Я видел такие в чужих dll .. но не хватает пока скилла это применять
2. У меня идет обращение к Autodesk.Civil.Settings.DrawingUnitType.Feet, которое имеет численный код "30" - то есть я могу присваивать в отместку его а не директивами, а есть ли где-то открытый "кодификатор" этих чисел - ID параметров? Для упрощения в дальнейшем

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Перейти к полной версии