CAD БИБЛИОТЕКА
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

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

Помогите перейти от Variant к Object

Ответ
Поиск в этой теме
Непрочитано 19.03.2021, 03:14 #1
Помогите перейти от Variant к Object
Sagamore
 
Регистрация: 19.03.2021
Сообщений: 4

Здравствуйте. На сколько я понял сопряжения через VBA не сделать, поэтому пытаюсь выполнить следующее:
1. Создаем 2 отрезка
2. Через метод Offset создаем вспомогательные отрезки к первым двум отрезкам для нахождения точки пересечения. Эта точка будет центром дуги.
3. Зная центр, начальную и конечную точки можем построить собственно дугу, которая будет вместо сопряжения.
4. Удаляем вспомогательные отрезки.

Проблема: Object required.

На сколько я понял метод IntersectWith работает с типом данных Object, а у нас на выходе Offset тип данных Variant.

Подскажите, как решить данную проблему.

Код:
[Выделить все]
Sub var()
' Create the line
    Dim lineObj As AcadLine
    Dim startPt(0 To 2) As Double
    Dim endPt(0 To 2) As Double
    startPt(0) = 0: startPt(1) = 0: startPt(2) = 0
    endPt(0) = 50: endPt(1) = 0: endPt(2) = 0
    Set lineObj = ThisDrawing.ModelSpace.AddLine(startPt, endPt)
        
    ' Create the line1
    Dim lineObj1 As AcadLine
    startPt(0) = 60: startPt(1) = 0: startPt(2) = 0
    endPt(0) = 90: endPt(1) = 10: endPt(2) = 0
    Set lineObj1 = ThisDrawing.ModelSpace.AddLine(startPt, endPt)
    'ZoomAll

    ' Offset
    Dim offsetObj As Variant
    Dim offsetObj1 As Variant
    offsetObj = lineObj.Offset(180)
    offsetObj1 = lineObj1.Offset(180)
    
    ' Find the intersection points between the offsetObj and offsetObj1
    Dim intPoints As Variant
    intPoints = offsetObj2.IntersectWith(offsetObj3, acExtendNone)
    
    ' Print all the intersection points
    Dim I As Integer, j As Integer, k As Integer
    Dim str As String
    If VarType(intPoints) <> vbEmpty Then
        For I = LBound(intPoints) To UBound(intPoints)
            str = "Intersection Point[" & k & "] is: " & intPoints(j) & "," & intPoints(j + 1) & "," & intPoints(j + 2)
            MsgBox str, , "IntersectWith Example"
            str = ""
            I = I + 2
            j = j + 3
            k = k + 1
        Next
    End If
End Sub
Просмотров: 2357
 
Непрочитано 19.03.2021, 09:13
#2
Boxa

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


Цитата:
Сообщение от Sagamore Посмотреть сообщение
Подскажите, как решить данную проблему.
Внимательно прочитать документацию к методу Offset, в частности описание возвращаемого значения, ну и прочитать про приведение типов.
__________________
_бложиг
Boxa на форуме  
 
Непрочитано 19.03.2021, 09:31
#3
nickname2019


 
Регистрация: 18.11.2019
Сообщений: 826


С учетом того, что мне за 20 лет программирования мне ни разу не приходила в голову мысль сопрягать отрезки программно, возможно, что Вы решаете задачу, которую можно решить более простым путем.
Если Вы собираетесь выводить программно графику - проще всего это делать при помощи динамических блоков (шаблонов), задавая им параметры программно, чем заниматься мучениями программно решать геометрические задачи через VBA или любую другую систему текстового программирования.
Геометрические задачи решаются графически при помощи "графического программирования", заложенного в основу создания динамических блоков.
nickname2019 вне форума  
 
Непрочитано 19.03.2021, 09:47
#4
trir


 
Регистрация: 18.12.2010
Сообщений: 4,478


точку пересечения можно и формулой найти
trir вне форума  
 
Непрочитано 19.03.2021, 10:01
#5
nickname2019


 
Регистрация: 18.11.2019
Сообщений: 826


Цитата:
Сообщение от trir Посмотреть сообщение
точку пересечения можно и формулой найти
Ага, параллельно решая проблемы с "почти параллельностью", "почти компланарностью", "почти совпадающими точками", "почти нулевой длиной отрезков", "почти делением на ноль" и т.д.
nickname2019 вне форума  
 
Непрочитано 19.03.2021, 10:21
#6
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,466
<phrase 1=


Точку пересечения НУЖНО формулой найти и дугу НУЖНО формулой расчитать
zamtmn вне форума  
 
Непрочитано 19.03.2021, 10:35
#7
nickname2019


 
Регистрация: 18.11.2019
Сообщений: 826


Цитата:
Сообщение от zamtmn Посмотреть сообщение
Точку пересечения НУЖНО формулой найти и дугу НУЖНО формулой расчитать
Зачем? Любой объект можно сделать динамическим блоком, у которого можно программно (или на экране) поменять параметры.
nickname2019 вне форума  
 
Непрочитано 19.03.2021, 11:22
#8
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,466
<phrase 1=


>>Зачем?
Зачем напрасно электричество жеч? посчитать - десяток другой простейших арифметических действий, а вот некая визуальная интерактивная сущность - огого нагрузка.
С таким подходом на элементарные действия никаких компов нехватит

К томуже чтоб менять какието там параметры их всеравно придется расчитать
zamtmn вне форума  
 
Автор темы   Непрочитано 20.03.2021, 08:33
#9
Sagamore


 
Регистрация: 19.03.2021
Сообщений: 4


Цитата:
Сообщение от nickname2019 Посмотреть сообщение
Геометрические задачи решаются графически при помощи "графического программирования", заложенного в основу создания динамических блоков.
Попробую работать в этом направлении. Спасибо
Sagamore вне форума  
 
Непрочитано 20.03.2021, 11:39
#10
nickname2019


 
Регистрация: 18.11.2019
Сообщений: 826


Цитата:
Сообщение от Sagamore Посмотреть сообщение
Попробую работать в этом направлении. Спасибо
Вот еще
https://dwg.ru/cat/news/4089

----- добавлено через ~3 мин. -----
Цитата:
Сообщение от zamtmn Посмотреть сообщение
>>Зачем?
Зачем напрасно электричество жеч? посчитать - десяток другой простейших арифметических действий, а вот некая визуальная интерактивная сущность - огого нагрузка.
С таким подходом на элементарные действия никаких компов нехватит. К томуже чтоб менять какието там параметры их всеравно придется расчитать
Иногда способность индивида решить трудную задачу сложным способом мешает ему упростить задачу и решить ее быстро и просто. Все таки электричество стоит дешевле, чем ресурсы мозгов умного человека, которые он мог бы потратить с большей пользой для себя и общества.
nickname2019 вне форума  
 
Непрочитано 23.03.2021, 08:51
#11
Boxa

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


Так так тему https://forum.dwg.ru/showthread.php?t=161130 закрыли, а они смежные, то придется отвечать здесь.
Цитата:
Цитата:
https://ru.wikipedia.org/wiki/%D0%9F...BC%D0%B0%D1%8F
Там есть разделы: "Уравнение прямой, проходящей через две заданные несовпадающие точки" и "Взаимное расположение нескольких прямых на плоскости" и там есть пересекаются в точке
Вопрос про сопряжение, а не нахождения точки пересечения
Я не предполагал, что Вы воспримите мои слова столь прямолинейно...
По указанной ссылке и в указанных разделах, можно найти или вывести формулы прямой параллельной заданной и отстоящей на заданном расстоянии, потом найти точку пересечения этих прямых - это будет центр окружности скругления. Я предположу, что Вы опять воспримите мои слова прямолинейно и уточню, что в расстояние между этими прямыми будет равно два корня, т.е. этих прямых две и точек пересечения будущих центров скругления то же будет две и Вам нужно будет выбрать точку лежащую внутри угла. По той же ссылке можно найти или получить не сложными преобразованиями формулы прямых, перпендикулярных заданным и проходящим через заданную точку, точку центра окружности скругления.
Найдя точки пересечения этих перпендикулярных и заданных прямых, Вы найдете точки начала и конца скругления.
Итого у Вас в наличии все 3 точки, нужные для построения сопряжения.

Графическое программирование, дорогое время специалиста.... блин, тут вычисление нескольких формул в рамках средней школы, зачем плодить сущности?
__________________
_бложиг
Boxa на форуме  
 
Непрочитано 23.03.2021, 09:36
#12
nickname2019


 
Регистрация: 18.11.2019
Сообщений: 826


Вот здесь есть динамический блок (справа сверху), в котором выполнено сопряжение линий по радиусу.
При растяжении "ручкой" меняется угол сопряжения.
https://dwg.ru/dnl/14773
nickname2019 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Помогите перейти от Variant к Object

Система Техэксперт дает уверенность в правильности и эффективности принимаемых инженерных решений!
Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с пояснительной запиской по разделам ГСВ, ВК, ОВ, как сделать у кого есть пример помогите Shamilchik Поиск литературы, чертежей, моделей и прочих материалов 2 11.07.2015 20:04
Помогите побыстрее перейти на Российское строительное законодательство. miskatonik Прочее. Архитектура и строительство 20 25.03.2014 12:46
помогите по макросу автоматическое прибавление целого числа всем выбранным числам timofeev_08 Программирование 11 03.08.2012 14:39
Не могу разобраться с методом CopyObjects(VBA) помогите Seven Программирование 3 29.04.2012 10:53
ANSYS 10 Помогите разобраться. Aндрeй ANSYS 6 12.12.2007 00:03