Создание 3 тела методом CreateLoftedSolid

Автор Тема: Создание 3 тела методом CreateLoftedSolid  (Прочитано 8567 раз)

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

Оффлайн Захаров МаксимАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 141
  • Карма: 3
Добрый день.
Подскажите пожалуйста почему не работает такой метод
Код - vb.net [Выбрать]
  1. Dim ArrayEnt As Autodesk.AutoCAD.DatabaseServices.Entity() = Nothing
  2.                                             ReDim ArrayEnt(1)
  3.                                             'строим 2 3dполилинии
  4.                                             Dim pts1 As Point3dCollection = New Point3dCollection()
  5.                                             pts1.Add(New Point3d(pt1X, pt1y, pt1z))
  6.                                             pts1.Add(New Point3d(pt2X, pt2y, pt2z))
  7.                                             pts1.Add(New Point3d(pt6X, pt6y, pt6z))
  8.                                             pts1.Add(New Point3d(pt5X, pt5y, pt5z))
  9.                                             Using poly1 As Polyline3d = New Polyline3d(Poly3dType.SimplePoly, pts1, True)
  10.                                                 acBlkTblRec.AppendEntity(poly1)
  11.                                                 acTrans.AddNewlyCreatedDBObject(poly1, True)
  12.                                                 ArrayEnt(1) = poly1
  13.                                             End Using
  14.                                             Dim PolyPod1 As Polyline3d = Nothing
  15.                                             Dim pts2 As Point3dCollection = New Point3dCollection()
  16.                                             pts2.Add(New Point3d(pt3X, pt3y, pt3z))
  17.                                             pts2.Add(New Point3d(pt4X, pt4y, pt4z))
  18.                                             pts2.Add(New Point3d(pt8X, pt8y, pt8z))
  19.                                             pts2.Add(New Point3d(pt7X, pt7y, pt7z))
  20.                                             Using poly2 As Polyline3d = New Polyline3d(Poly3dType.SimplePoly, pts2, True)
  21.                                                 acBlkTblRec.AppendEntity(poly2)
  22.                                                 acTrans.AddNewlyCreatedDBObject(poly2, True)
  23.                                                 ArrayEnt(0) = poly2
  24.                                             End Using
  25.                                             Dim sol3d As Solid3d = New Solid3d()
  26.                                             Dim options As New LoftOptions
  27.                                             sol3d.CreateLoftedSolid(ArrayEnt, New Autodesk.AutoCAD.DatabaseServices.Entity() {}, Nothing, options)
  28.                                             acBlkTblRec.AppendEntity(sol3d)
  29.                                             acTrans.AddNewlyCreatedDBObject(sol3d, True)
Я пока работаю так, 3д полилинии у меня создаются, дальше я в ручную создаю солид методом Loff. Хотелось бы, чтобы солид создавался автоматически. А вот последние 5 строчек кода не работают.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Захаров МаксимАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 141
  • Карма: 3
Re: Создание 3 тела методом CreateLoftedSolid
« Ответ #2 : 06-03-2022, 22:04:41 »
Да вот Александр, я именно этот пример и смотрел. Вылезает ошибка в строке
sol3d.CreateLoftedSolid(ArrayEnt, New Autodesk.AutoCAD.DatabaseServices.Entity() {}, Nothing, options)
Косяков в создании 3д полилиний у меня нет, в ручную используя команду лофт, тело создается.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Создание 3 тела методом CreateLoftedSolid
« Ответ #3 : 06-03-2022, 22:10:01 »
Вылезает ошибка в строке
sol3d.CreateLoftedSolid(ArrayEnt, New Autodesk.AutoCAD.DatabaseServices.Entity() {}, Nothing, options)
Какая ошибка вылезает? И в какой версии AutoCAD?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Захаров МаксимАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 141
  • Карма: 3
Re: Создание 3 тела методом CreateLoftedSolid
« Ответ #4 : 06-03-2022, 23:04:56 »
О, вроде получается. В примере сказано что pathCurve может быть Nothing. Так не работает, я задал траекторию в виде линии.
И похоже надо сперва создать все 3 объекта для лофта, завершить транзакцию. И только потом в новой транзакции делать CreateLoftedSolid
Тогда все получается. Использую Civil3d 2021

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Создание 3 тела методом CreateLoftedSolid
« Ответ #5 : 06-03-2022, 23:16:49 »
И похоже надо сперва создать все 3 объекта для лофта, завершить транзакцию.
Издержки использования транзакций в AutoCAD .NET API...
В примере сказано что pathCurve может быть Nothing.
Думаю, что может, но при определенных услових (в том числе и заданных через LoftOptions).
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение