| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Программный поворот системы координат.

Программный поворот системы координат.

Ответ
Поиск в этой теме
Непрочитано 23.04.2018, 14:25 #1
Программный поворот системы координат.
Дмитрий Асташев
 
päällikön suunnittelijat
 
Pietari, Venäjä
Регистрация: 04.12.2010
Сообщений: 63

Добрый день, друзья!

Сам пользую COM на AutoCAD2013. Текущий вопрос универсального свойства.

Пытаюсь нарисовать сферу заданного радиуса проходящую через три точки в пространстве.
Если Z у всех точек одинаковая, то все вычисляется нормально.В противном случае для нахождения центра сферы нужно решать систему квадратных уравнений с 3 мя неизвестными....
Должен быть более простой способ - повернуть ПСК.

Поворачиваю ее так:
Dim comstring = "_UCS " & Point2txt3D(p1) & vbCr & Point2txt3D(p2) & vbCr & Point2txt3D(p3) & vbCr
doc.SendCommand(comstring)
где Point2txt3D выдает строку координат, разделенных запятой.

ПСК поворачивается.

Далее присваиваю ПСК имя
comstring = "_UCS " & "NA" & vbCr & "S" & vbCr & ucsname & vbCr
doc.SendCommand(comstring)
doc.ActiveUCS = doc.UserCoordinateSystems.Item(ucsname)

Имя присваивается, ошибок нет, оси курсора повернуты куда надо.
Далее транслируем координаты:
Dim u1() As Double = doc.Utility.TranslateCoordinates(p1, AcCoordinateSystem.acWorld, AcCoordinateSystem.acUCS, False)
Dim u2() As Double = doc.Utility.TranslateCoordinates(p2, AcCoordinateSystem.acWorld, AcCoordinateSystem.acUCS, False)
Dim u3() As Double = doc.Utility.TranslateCoordinates(p3, AcCoordinateSystem.acWorld, AcCoordinateSystem.acUCS, False)

рисуем сечение сферы - круг через наши три точки

Dim c As AcadCircle = Круг2DПо3Точкам(u1, u2, u3)

Public Function Круг2DПо3Точкам(p1() As Double, p2() As Double, p3() As Double)
Dim p1txt As String = p1(0).ToString & "," & p1(1).ToString & "," & p1(2).ToString
Dim p2txt As String = p2(0).ToString & "," & p2(1).ToString '& "," & p2(2).ToString
Dim p3txt As String = p3(0).ToString & "," & p3(1).ToString '& "," & p3(2).ToString
doc.SendCommand("_CIRCLE" & vbCr & "3P" & vbCr & p1txt & vbCr & p2txt & vbCr & p3txt & vbCr)
Dim sset As AcadSelectionSet = NewSelectionSets(Guid.NewGuid.ToString)
sset.Select(AcSelect.acSelectionSetLast)
Dim retval = sset(0)
sset.Delete()
Return retval
End Function

Одидаю, что Autocad рисует в активной ПСК, ан нет, круг лежит в плоскости XY WCS. Проходит через точки проекции нужных точек.

Что делаю не так???
Просмотров: 3194
 
Непрочитано 23.04.2018, 14:40
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


При работе через VBA / ActiveX координаты примитивам нередко задаются в WCS. После создания примитива меняй ему нормаль - и не понадобится ПСК.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 23.04.2018, 14:50
#3
Дмитрий Асташев

päällikön suunnittelijat
 
Регистрация: 04.12.2010
Pietari, Venäjä
Сообщений: 63


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
При работе через VBA / ActiveX координаты примитивам нередко задаются в WCS. После создания примитива меняй ему нормаль - и не понадобится ПСК.
Алексей, вычислить центр и радиус окружности через три точки в пространстве - это очень сложно, если плоскость точек не параллельна плоскости осей. Должен же быть способ рисовать на повернутых ПСК. Иначе зачем тогда все эти TranslateCoordinates.

Автокад же умеет рисовать на повернутых плоскостях, на наклонных гранях тел, например.
Дмитрий Асташев вне форума  
 
Непрочитано 23.04.2018, 14:54
#4
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


читайте справку по object.TransformBy TransformationMatrix
Boxa вне форума  
 
Автор темы   Непрочитано 23.04.2018, 15:43
#5
Дмитрий Асташев

päällikön suunnittelijat
 
Регистрация: 04.12.2010
Pietari, Venäjä
Сообщений: 63


Друзья, я понял про поворот нарисованного примитива. Пожалуйста, не предлагайте больше этот вариант. Он очень и очень сложен. Вопрос задан про рисование на повернутой ПСК. Автокад это умеет делать, повторю, например, на наклонных гранях тел. Вопрос, как реализовать такое рисование на VBA или LISP.

----- добавлено через ~1 ч. -----
Нашел ошибку. Правильная установка UCS такова:

Dim comstring = "_UCS " & "N" & vbCr & "3P" & vbCr & Point2txt3D(p1) & vbCr & Point2txt3D(p2) & vbCr & Point2txt3D(p3) & vbCr
doc.SendCommand(comstring)

comstring = "_UCS " & "NA" & vbCr & "S" & vbCr & ucsname & vbCr
doc.SendCommand(comstring)

Далее все рисуется в плоскости новой красивой умной UCS.
Дмитрий Асташев вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Программный поворот системы координат.

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какая система координат предпочтительна для генплана? randum Прочее. Архитектура и строительство 12 31.10.2013 17:11
Как отключить отображение знака системы координат на теле? bboysyndrom AutoCAD 1 29.10.2013 13:02
Коэфициент запаса устойчивости системы и мин. коэф запаса устойчивости элемента - большая разница AlexCAD777 Расчетные программы 14 22.01.2010 22:30
Преобразование координат вершин полилинии из мировой системы координат в текущую молодой человек Программирование 1 16.01.2010 22:57
управление системой координат Автокад из Делфей Владимир В Программирование 12 27.04.2005 09:54