Последние сообщения

Последние сообщения

Страницы: [1] 2 3 ... 10
1
Атрибут почему-то не массивится
Приветствую на форуме!
1. Насколько я знаю он и не должен "массивится". "Массивится" только то, что содержится в определении блока, а атрибут (в отличии от определения атрибута) - это то, что принадлежит вставке блока, а не определению блока.
2. Что этот вопрос делает в теме .NET?
2
AutoCAD .NET API / Массив атрибутов в динамическом блоке
« Последний ответ от boi4ev 19-06-2019, 17:04:11 »
Доброго времени суток всем. Помогите решить проблему с моим блоком. Задумка такая,  чтобы плиты масиивились вместе с названием в составе динамического блока. Атрибут почему-то не массивится. Пробовал через текст с полем на содержимое атрибута, не работает. Кто предложит какие варианты решения проблемы. Название хочется менять вручную для каждого конкретного случая.
3
Говорят, что объект в Москве. Не знаю по каким координатам это Москва :)
4
Это пользователи почему-то решили создавать объекты в космосе...
Подозреваю, что это геодезические координаты. Какие-нибудь WGS 84...
5
Это пользователи почему-то решили создавать объекты в космосе...
6
Увы, но ты выскочил за пределы точности. Если координаты уменьшить в 1000 раз, то всё строится нормально.
Вот же блин!! Я сегодня полдня убил на поиски!! Всю голову сломал, каждое значение проверил и перепроверил!  :-\ Эх :D
Спасибо Вам большое! Сам бы я ещё долго искал бы причину!

Вообще я ориентируюсь на то, что в операциях с Region и Solid3d относительные значения не должны превышать 1e+6. А у тебя мало что координаты 1e+7, так еще и радиус 1e-1, т.е. в результате имеем 1e+8. Удивительно то, что у тебя первый Solid3d строится нормально, а не то, что второй ненормален.
7
Увы, но ты выскочил за пределы точности. Если координаты уменьшить в 1000 раз, то всё строится нормально.
Вот же блин!! Я сегодня полдня убил на поиски!! Всю голову сломал, каждое значение проверил и перепроверил!  :-\ Эх :D
Спасибо Вам большое! Сам бы я ещё долго искал бы причину!
8
Решение вижу вот в таком изменении кода:

Код - C# [Выбрать]
  1. using Autodesk.AutoCAD.DatabaseServices;
  2. using Autodesk.AutoCAD.Geometry;
  3. using Autodesk.AutoCAD.Runtime;
  4. using System;
  5. using System.Diagnostics;
  6.  
  7. #pragma warning disable CS0618
  8.  
  9. namespace AcadTest2020
  10. {
  11.   public class TestSolid
  12.   {
  13.     private readonly double diameter = 0.1;
  14.     private readonly Vector3d vertDir = new Vector3d(0, 0, 1);
  15.  
  16.     [CommandMethod("RunSolidTest1")]
  17.     public void RunTest1()
  18.     {
  19.       Vector3d insideDirection = new Vector3d
  20.           (0.968490925903539,
  21.           0.249048843487588,
  22.           0);
  23.  
  24.       Point3d circleCenter = new Point3d
  25.           (2232732.26355686,
  26.           163570.797977758,
  27.           134.681813969545);
  28.  
  29.       CreateSolid(insideDirection, Point3d.Origin, Matrix3d.Displacement(new Vector3d(circleCenter.ToArray())));
  30.     }
  31.  
  32.     [CommandMethod("RunSolidTest2")]
  33.     public void RunTest2()
  34.     {
  35.       Vector3d insideDirection = new Vector3d
  36.           (-0.968490925903539,
  37.           -0.249048843487588,
  38.           0);
  39.  
  40.       Point3d circleCenter = new Point3d
  41.           (2232741.17367338,
  42.           163573.089227118,
  43.           134.820753838578);
  44.  
  45.       CreateSolid(insideDirection, Point3d.Origin, Matrix3d.Displacement(new Vector3d(circleCenter.ToArray())));
  46.     }
  47.  
  48.     void CreateSolid
  49.         (Vector3d insideDirection,
  50.         Point3d circleCenter, Matrix3d mat)
  51.     {
  52.       Vector3d axisDir = vertDir.CrossProduct(insideDirection);
  53.       Point3d axisPoint = circleCenter - vertDir.MultiplyBy(diameter / 2.0);
  54.       using (Circle circle = new Circle(circleCenter, insideDirection, diameter / 2.0))
  55.       using (Solid3d rev = RevolveContour(circle, axisPoint, axisDir, Math.PI / 2.0))
  56.       {
  57.         if (rev != null)
  58.         {
  59.           ObjectId spaceId
  60.               = SymbolUtilityServices.GetBlockModelSpaceId
  61.               (HostApplicationServices.WorkingDatabase);
  62.           using (BlockTableRecord space
  63.               = spaceId.Open(OpenMode.ForWrite) as BlockTableRecord)
  64.           {
  65.             rev.TransformBy(mat);
  66.             space.AppendEntity(rev);
  67.           }
  68.         }
  69.       }
  70.     }
  71.  
  72.     /// <summary>
  73.     ///
  74.     /// </summary>
  75.     /// <param name="contour"></param>
  76.     /// <param name="axisPoint"></param>
  77.     /// <param name="axisDir"></param>
  78.     /// <param name="angleOfRev"></param>
  79.     /// <returns></returns>
  80.     static Solid3d RevolveContour
  81.             (Entity contour, Point3d axisPoint,
  82.             Vector3d axisDir, double angleOfRev = 2 * Math.PI)
  83.     {
  84.       RevolveOptionsBuilder
  85.           builder = new RevolveOptionsBuilder();
  86.       builder.CloseToAxis = false;
  87.       builder.DraftAngle = 0;
  88.       builder.TwistAngle = 0;
  89.  
  90.       // Вращаем полусечение
  91.       Solid3d solid = new Solid3d();
  92.       try
  93.       {
  94.         solid.CreateRevolvedSolid
  95.             (contour,
  96.             axisPoint,
  97.             axisDir,
  98.             angleOfRev,
  99.             0.0,
  100.             builder.ToRevolveOptions());
  101.         return solid;
  102.       }
  103.       catch (System.Exception ex)
  104.       {
  105.         solid.Dispose();
  106.         Debug.WriteLine(ex.Message);
  107.         Debug.WriteLine(ex.StackTrace);
  108.         return null;
  109.       }
  110.     }
  111.   }
  112. }
9
Дмитрий Загорулькин,
Увы, но ты выскочил за пределы точности. Если координаты уменьшить в 1000 раз, то всё строится нормально.
10
CreateRevolvedSolid
Извиняюсь за бредятину - смотрел с телефона и не обратил внимания, что это вектор, а не список значений  :D
Страницы: [1] 2 3 ... 10