Polyline3d (AUTOCAD 2012 на C# Visual Studio.)

Автор Тема: Polyline3d (AUTOCAD 2012 на C# Visual Studio.)  (Прочитано 19758 раз)

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

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

Оффлайн bakaIIHXАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 1
Замени Polyline на Polyline3d, AddVertexAt на AppendVertex. При этом нужно будет создать PolylineVertex3d, передав конструктору точку вершины.

Для  PolylineVertex3d нужно отдельно создавать точку?

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Polyline3d (AUTOCAD 2012 на C# Visual Studio.)
« Ответ #1 : 06-10-2014, 16:45:02 »
Для  PolylineVertex3d нужно отдельно создавать точку?
Вопроса не понял.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн bakaIIHXАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 1
Re: Polyline3d (AUTOCAD 2012 на C# Visual Studio.)
« Ответ #2 : 06-10-2014, 16:51:14 »
Вопроса не понял.

Код - C++ [Выбрать]
  1. using (PolylineVertex3d poly3dVertex = new PolylineVertex3d())


создаем вершину,какую точку необходимо указывать?

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Polyline3d (AUTOCAD 2012 на C# Visual Studio.)
« Ответ #3 : 06-10-2014, 17:09:23 »
создаем вершину,какую точку необходимо указывать?
Ту точку, которая будет вершиной.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Polyline3d (AUTOCAD 2012 на C# Visual Studio.)
« Ответ #4 : 06-10-2014, 17:22:58 »
Так выглядит код для создания замкнутой 3D-полилинии. Возьми из него то, что тебе нужно.
Код - C# [Выбрать]
  1. [CommandMethod("MakeContour3D")]
  2. public void MakeContour3D()
  3. {
  4.     AcAp.Document doc = AcAp.Application.DocumentManager.MdiActiveDocument;
  5.     AcDb.Database db = doc.Database;
  6.     AcEd.Editor ed = doc.Editor;
  7.     AcGe.Matrix3d mat = ed.CurrentUserCoordinateSystem;
  8.     AcEd.PromptPointOptions pr =
  9.             new AcEd.PromptPointOptions("\nУкажите вершину контура: ");
  10.     AcDb.ObjectId idPoly;
  11.     AcGe.Point3d lastPt = AcGe.Point3d.Origin;
  12.     using (AcDb.Polyline3d poly = new AcDb.Polyline3d())
  13.     {
  14.         using (AcDb.BlockTableRecord space =
  15.              db.CurrentSpaceId.Open(AcDb.OpenMode.ForWrite) as AcDb.BlockTableRecord)
  16.         {
  17.             idPoly = space.AppendEntity(poly);
  18.         }
  19.     }
  20.     int nVert = 0;
  21.     while (true)
  22.     {
  23.         if (nVert > 1)
  24.         {
  25.             pr.BasePoint = lastPt;
  26.             pr.UseBasePoint = true;
  27.             pr.UseDashedLine = true;
  28.         }
  29.         if (nVert >= 3)
  30.         {
  31.             pr.AllowNone = true;
  32.             pr.Message = "\nУкажите очередную вершину контура (ENTER - завершение): ";
  33.         }
  34.         else
  35.         {
  36.             pr.AllowNone = false;
  37.         }
  38.         AcEd.PromptPointResult res = ed.GetPoint(pr);
  39.         if (res.Status == AcEd.PromptStatus.Cancel)
  40.         {
  41.             using (AcDb.Polyline3d poly =
  42.                   idPoly.Open(AcDb.OpenMode.ForWrite) as AcDb.Polyline3d)
  43.             {
  44.                 poly.Erase();
  45.                 break;
  46.             }
  47.         }
  48.         else if (res.Status == AcEd.PromptStatus.None)
  49.         {
  50.             break;
  51.         }
  52.         else
  53.         {
  54.             lastPt = res.Value;
  55.             using (AcDb.Polyline3d poly =
  56.                  idPoly.Open(AcDb.OpenMode.ForWrite) as AcDb.Polyline3d)
  57.             {
  58.                 // Преобразуем из ПСК в МСК
  59.                 AcGe.Point3d pt = res.Value.TransformBy(mat);
  60.                 using (AcDb.PolylineVertex3d pv3d = new AcDb.PolylineVertex3d(pt)) {
  61.                     poly.AppendVertex(pv3d);
  62.                 }
  63.                 poly.Closed = true;
  64.             }
  65.             nVert++;
  66.         }
  67.     }
  68. }

Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн bakaIIHXАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 1
Re: Polyline3d (AUTOCAD 2012 на C# Visual Studio.)
« Ответ #5 : 07-10-2014, 16:44:30 »
AcGe.Point3d pt = res.Value.TransformBy(mat);

Объясните пожалуйста эту строчку.

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Polyline3d (AUTOCAD 2012 на C# Visual Studio.)
« Ответ #6 : 07-10-2014, 16:49:19 »
В строке AcGe.Matrix3d mat = ed.CurrentUserCoordinateSystem; мы получаем матрицу mat преобразования из ПСК в МСК.
ed.GetPoint даёт нам в  res.Value координату, указанную пользователем, в ПСК.
Таким образом AcGe.Point3d pt = res.Value.TransformBy(mat); даёт нам точку, которую указал пользователь, но преобразованную в МСК. Это преобразование нужно для внесение информации о вершине полилинии, так как вершины хранят информацию именно в МСК.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн bakaIIHXАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 1
Re: Polyline3d (AUTOCAD 2012 на C# Visual Studio.)
« Ответ #7 : 07-10-2014, 17:00:02 »
В строке AcGe.Matrix3d mat = ed.CurrentUserCoordinateSystem; мы получаем матрицу mat преобразования из ПСК в МСК.
ed.GetPoint даёт нам в  res.Value координату, указанную пользователем, в ПСК.
Таким образом AcGe.Point3d pt = res.Value.TransformBy(mat); даёт нам точку, которую указал пользователь, но преобразованную в МСК. Это преобразование нужно для внесение информации о вершине полилинии, так как вершины хранят информацию именно в МСК.

Значит мне нужно, что бы указывались координаты, которые сами генерируются,а потом преобразовать их, что бы получить вершину полилинии.
 

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Polyline3d (AUTOCAD 2012 на C# Visual Studio.)
« Ответ #8 : 07-10-2014, 17:02:22 »
Значит мне нужно, что бы указывались координаты, которые сами генерируются,а потом преобразовать их, что бы получить вершину полилинии.
Если у тебя координаты сразу в МСК, то ничего преобразовывать не нужно. Это был конкретный пример ручного ввода координат пользователем. У тебя же ситуация иная.

Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн bakaIIHXАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 1
Re: Polyline3d (AUTOCAD 2012 на C# Visual Studio.)
« Ответ #9 : 07-10-2014, 17:07:32 »
Если у тебя координаты сразу в МСК, то ничего преобразовывать не нужно. Это был конкретный пример ручного ввода координат пользователем. У тебя же ситуация иная.

Просто не могу понять, как указать вершину.

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Polyline3d (AUTOCAD 2012 на C# Visual Studio.)
« Ответ #10 : 07-10-2014, 17:21:50 »
Просто не могу понять, как указать вершину.
А я не могу понять в каком виде у тебя вершина.
P.S.: Создается впечатление, что ты рассчитываешь на то, что я сделаю полностью за тебя твою задачу. Но это не соответствует моему представлению о том, чем я тут занимаюсь. Моя цель научить тебя самостоятельно это делать.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн bakaIIHXАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 1
Re: Polyline3d (AUTOCAD 2012 на C# Visual Studio.)
« Ответ #11 : 07-10-2014, 17:46:17 »
P.S.: Создается впечатление, что ты рассчитываешь на то, что я сделаю полностью за тебя твою задачу. Но это не соответствует моему представлению о том, чем я тут занимаюсь. Моя цель научить тебя самостоятельно это делать.

Я хочу научится все делать сам, просто много вопросов .

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Polyline3d (AUTOCAD 2012 на C# Visual Studio.)
« Ответ #12 : 07-10-2014, 18:00:45 »
Я хочу научится все делать сам, просто много вопросов .
Отлично. Ты пишешь, что не знаешь как указать вершину. Допустим ты сформировал уже точку:
Код - C# [Выбрать]
  1. AcGe.Point3d pt = new AcGe.Point3d(x,y,z); // x,y,z - известные тебе числа
Тогда добавление вершины к 3D-полилинии выглядит так:
Код - C# [Выбрать]
  1. using (AcDb.Polyline3d poly =
  2.        idPoly.Open(AcDb.OpenMode.ForWrite) as AcDb.Polyline3d)
  3. {
  4.     using (AcDb.PolylineVertex3d pv3d = new AcDb.PolylineVertex3d(pt)) {
  5.        poly.AppendVertex(pv3d);
  6.     }
  7. }
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн bakaIIHXАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 1
Re: Polyline3d (AUTOCAD 2012 на C# Visual Studio.)
« Ответ #13 : 13-10-2014, 22:01:51 »
x,y,z - известные тебе числа

Хотел спросить, а x,y,z через random.NextDouble задавать?

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Polyline3d (AUTOCAD 2012 на C# Visual Studio.)
« Ответ #14 : 13-10-2014, 22:05:03 »
Хотел спросить, а x,y,z через random.NextDouble задавать?
Если ты в контексте своей темы: http://adn-cis.org/forum/index.php?topic=971.0 то наверное да.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн bakaIIHXАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 1
Re: Polyline3d (AUTOCAD 2012 на C# Visual Studio.)
« Ответ #15 : 16-10-2014, 00:22:03 »
Если ты в контексте своей темы: http://adn-cis.org/forum/index.php?topic=971.0 то наверное да.

получается что так:
 AcGe.Point3d pt = new AcGe.Point3d(r.NextDouble() * 100, r.NextDouble() * 100, r.NextDouble() * 100);

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Polyline3d (AUTOCAD 2012 на C# Visual Studio.)
« Ответ #16 : 16-10-2014, 00:25:16 »
AcGe.Point3d pt = new AcGe.Point3d(r.NextDouble() * 100, r.NextDouble() * 100, r.NextDouble() * 100);
Именно это я и имел в виду. Прогрессируешь. :)
 
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн bakaIIHXАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 1
Re: Polyline3d (AUTOCAD 2012 на C# Visual Studio.)
« Ответ #17 : 16-10-2014, 00:26:46 »
Именно это я и имел в виду. Прогрессируешь.
Спасибо. Еще вопросы можно задавать? И позвольте я пока не буду создавать новую тему.

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Polyline3d (AUTOCAD 2012 на C# Visual Studio.)
« Ответ #18 : 16-10-2014, 00:29:14 »
Еще вопросы можно задавать?
Да.
И позвольте я пока не буду создавать новую тему.
Если вопрос не связан с названием этой темы - не позволю!  >:(
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн bakaIIHXАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 1
Re: Polyline3d (AUTOCAD 2012 на C# Visual Studio.)
« Ответ #19 : 16-10-2014, 00:32:00 »
Если вопрос не связан с названием этой темы - не позволю! 
Я Вас понял.

Оффлайн bakaIIHXАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 1
Re: Polyline3d (AUTOCAD 2012 на C# Visual Studio.)
« Ответ #20 : 16-10-2014, 00:35:23 »
using
Код - C# [Выбрать]
  1. (AcDb.Polyline3d poly = idPoly.Open(AcDb.OpenMode.ForWrite) as AcDb.Polyline3d)


При добавлении этой строки, происходит ошибка, а в примере что вы дали свободно используется.
« Последнее редактирование: 16-10-2014, 00:47:20 от Александр Ривилис »

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Polyline3d (AUTOCAD 2012 на C# Visual Studio.)
« Ответ #21 : 16-10-2014, 00:49:15 »
При добавлении этой строки, происходит ошибка, а в примере что вы дали свободно используется.
А теперь приведи полностью код, который получился после добавления этой строки. Или ты думаешь что я могу сам догадаться куда ты её добавил? И какая ошибка происходит? На этапе компиляции или на этапе выполнения?

P.S.: Так как эта тема по смыслу продолжение предыдущей, то я их объединяю.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн bakaIIHXАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 1
Re: Polyline3d (AUTOCAD 2012 на C# Visual Studio.)
« Ответ #22 : 16-10-2014, 00:54:25 »
А теперь приведи полностью код, который получился после добавления этой строки. Или ты думаешь что я могу сам догадаться куда ты её добавил? И какая ошибка происходит? На этапе компиляции или на этапе выполнения?

Код - C# [Выбрать]
  1. delegate void FinishedProcessingDelegate();
  2.         static void FinishedProcessing()
  3.         {
  4.  
  5.             AcAp.Document doc = AcAp.Application.DocumentManager.MdiActiveDocument;
  6.             using (AcAp.DocumentLock locDoc = doc.LockDocument())
  7.             {
  8.                 AcDb.ObjectId spaceId = doc.Database.CurrentSpaceId;
  9.                 using (AcDb.BlockTableRecord btr = spaceId.Open(AcDb.OpenMode.ForWrite) as AcDb.BlockTableRecord)
  10.                 {
  11.                     {
  12.  
  13.                         using (AcDb.Polyline3d poly = new AcDb.Polyline3d())
  14.                         {
  15.                            
  16.                             AcGe.Point3d pt = new AcGe.Point3d(r.NextDouble() * 100, r.NextDouble() * 100, r.NextDouble() * 100);
  17.                             poly.SetDatabaseDefaults();
  18.                             poly.ColorIndex = c_color;
  19.                             for (int i = 0; i < n_vertexies; i++)
  20.                             {
  21.                                 AcDb.ObjectId idPoly;
  22.                                 using (AcDb.Polyline3d poly =
  23.                                               idPoly.Open(AcDb.OpenMode.ForWrite) as AcDb.Polyline3d)
  24.  
  25.                                 using (AcDb.PolylineVertex3d pv3d = new AcDb.PolylineVertex3d(pt))
  26.                                 {
  27.                                     poly.AppendVertex(pv3d);
  28.                                 }
  29.                                 btr.AppendEntity(poly);
  30.                             }
  31.  
  32.                         }
  33.                     }
  34.                 }
  35.             }
  36.         }

Говорит, что poly уже используется, но похоже было и в примере.

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Polyline3d (AUTOCAD 2012 на C# Visual Studio.)
« Ответ #23 : 16-10-2014, 01:03:22 »
Пока я вижу, что ты не очень понимаешь что делаешь.  ;)
Попробуй так:
Код - C# [Выбрать]
  1. static void FinishedProcessing()
  2. {
  3.     AcAp.Document doc = AcAp.Application.DocumentManager.MdiActiveDocument;
  4.     using (AcAp.DocumentLock locDoc = doc.LockDocument())
  5.     {
  6.       AcDb.ObjectId spaceId = doc.Database.CurrentSpaceId;
  7.       using (AcDb.BlockTableRecord btr = spaceId.Open(AcDb.OpenMode.ForWrite) as AcDb.BlockTableRecord)
  8.       {
  9.          using (AcDb.Polyline3d poly = new AcDb.Polyline3d())
  10.          {
  11.              AcGe.Point3d pt = new AcGe.Point3d(r.NextDouble() * 100, r.NextDouble() * 100, r.NextDouble() * 100);
  12.              poly.SetDatabaseDefaults();
  13.              poly.ColorIndex = c_color;
  14.              btr.AppendEntity(poly);
  15.              for (int i = 0; i < n_vertexies; i++)
  16.              {
  17.                  using (AcDb.PolylineVertex3d pv3d = new AcDb.PolylineVertex3d(pt))
  18.                  {
  19.                      poly.AppendVertex(pv3d);
  20.                  }
  21.              }
  22.          }
  23.       }
  24.    }
  25. }

В  том коде, который я дал тебе в качестве образца, вершины к 3D-полилинии добавлялись после указания пользователем и там каждый раз нужно было "открывать" 3D-полилинию по её ObjectId и добавлять новую вершину. В этом же коде ты создаешь полилинию сразу и соответственно тебе не нужно её каждый раз открывать.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн bakaIIHXАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 1
Re: Polyline3d (AUTOCAD 2012 на C# Visual Studio.)
« Ответ #24 : 16-10-2014, 01:18:03 »
В  том коде, который я дал тебе в качестве образца, вершины к 3D-полилинии добавлялись после указания пользователем и там каждый раз нужно было "открывать" 3D-полилинию по её ObjectId и добавлять новую вершину. В этом же коде ты создаешь полилинию сразу и соответственно тебе не нужно её каждый раз открывать.
С этим ясно. Но я так понимаю, это не все изменения, которые нужны, для получения 3D-полилинии.

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Polyline3d (AUTOCAD 2012 на C# Visual Studio.)
« Ответ #25 : 16-10-2014, 01:18:54 »
С этим ясно. Но я так понимаю, это не все изменения, которые нужны, для получения 3D-полилинии.
Проверь.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн bakaIIHXАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 1

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Polyline3d (AUTOCAD 2012 на C# Visual Studio.)
« Ответ #27 : 16-10-2014, 01:32:09 »
Проверь.




Я исправлял код в http://adn-cis.org/forum/index.php?topic=999.msg4688#msg4688 . Убедись что он у тебя тоже исправленный.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн bakaIIHXАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 1
Re: Polyline3d (AUTOCAD 2012 на C# Visual Studio.)
« Ответ #28 : 16-10-2014, 01:40:43 »
Я исправлял код в http://adn-cis.org/forum/index.php?topic=999.msg4688#msg4688 . Убедись что он у тебя тоже исправленный.

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

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Polyline3d (AUTOCAD 2012 на C# Visual Studio.)
« Ответ #29 : 16-10-2014, 01:50:26 »
Ошибка исчезла.
Это хорошо.
Программу запустил, начала работать, появляются точки, я так понимаю это вершины.
Вообще-то они должны быть соединены линиями.
Подскажите команду, что бы посмотреть свойства примитива.
_LIST
_PROPERTIES
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн bakaIIHXАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 1
Re: Polyline3d (AUTOCAD 2012 на C# Visual Studio.)
« Ответ #30 : 16-10-2014, 01:52:51 »
Вообще-то они должны быть соединены линиями.


Но почему то одни точки.

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Polyline3d (AUTOCAD 2012 на C# Visual Studio.)
« Ответ #31 : 16-10-2014, 01:59:10 »
Но почему то одни точки.
Проверь количество вершин у созданных 3D-полилиний. И какие координаты у этих вершин.
« Последнее редактирование: 16-10-2014, 09:29:20 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн bakaIIHXАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 1
Re: Polyline3d (AUTOCAD 2012 на C# Visual Studio.)
« Ответ #32 : 16-10-2014, 02:03:53 »
Проверь количество вершин у созданных 3D-полилний. И какие координаты у этих вершин.
ПОЛИЛИНИЯ           Слой: "0"
                                     Пространство: Пространство модели
                   Цвет: 201    Тип линий: "ПОСЛОЮ"
                   Метка = 259
       Разомкнутая пространство
  Первые 3 точки не определяют плоскость. Площадь не вычислена.
            длина    0.0000

                  ВЕРШИНА            Слой: "0"
                                     Пространство: Пространство модели
                   Метка = 25a
      Пространство
                 в точке, X=  68.4578  Y=  56.0258  Z=  58.8355

Отмечено как Решение Александр Ривилис 25-04-2021, 19:55:07

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Polyline3d (AUTOCAD 2012 на C# Visual Studio.)
« Ответ #33 : 16-10-2014, 09:17:42 »
Я не обратил внимание, что у тебя точка создается вне цикла и соответственно все вершины у твоей 3D-полилинии совпадают. Исправь на это:
Код - C# [Выбрать]
  1. static void FinishedProcessing()
  2. {
  3.   AcAp.Document doc = AcAp.Application.DocumentManager.MdiActiveDocument;
  4.   using (AcAp.DocumentLock locDoc = doc.LockDocument()) {
  5.     AcDb.ObjectId spaceId = doc.Database.CurrentSpaceId;
  6.     using (AcDb.BlockTableRecord btr = spaceId.Open(AcDb.OpenMode.ForWrite) as AcDb.BlockTableRecord) {
  7.       using (AcDb.Polyline3d poly = new AcDb.Polyline3d()) {
  8.         poly.SetDatabaseDefaults();
  9.         poly.ColorIndex = c_color;
  10.         btr.AppendEntity(poly);
  11.         for (int i = 0; i < n_vertexies; i++) {
  12.           AcGe.Point3d pt =
  13.             new AcGe.Point3d(r.NextDouble() * 100, r.NextDouble() * 100, r.NextDouble() * 100);
  14.           using (AcDb.PolylineVertex3d pv3d = new AcDb.PolylineVertex3d(pt)) {
  15.             poly.AppendVertex(pv3d);
  16.           }
  17.         }
  18.       }
  19.     }
  20.   }
  21. }

P.S.: Вчера я код не запускал и не тестировал, "писал на коленке", вот и не заметил эту ошибку.
« Последнее редактирование: 16-10-2014, 09:28:41 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение