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

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

Построение дуги по 3 точкам в AutoCad

Ответ
Поиск в этой теме
Непрочитано 21.11.2008, 19:59 #1
Построение дуги по 3 точкам в AutoCad
ut2010
 
Регистрация: 14.09.2008
Сообщений: 11

Помогите построить дугу по 3 точкам на VBA в AutoCad.
Просмотров: 5910
 
Непрочитано 21.11.2008, 22:05
#2
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Тут математику надо вспоминать - ну или командными методами.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 21.11.2008, 22:58
#3
zamtmn

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


вспоминаем математику)):
http://algolist.manual.ru/maths/geom...ion/circle.php
zamtmn вне форума  
 
Автор темы   Непрочитано 22.11.2008, 19:20
#4
ut2010


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


zamtmn, что то не выходит по приведенным Вами формулам, сейчас пытаюсь сам вывести.

Неужели VBA Autocada так урезан, ведь есть инструмент рисования дуги по 3 точкам, почему это не реализовано в VBA???
ut2010 вне форума  
 
Непрочитано 22.11.2008, 23:40
#5
Кулик Алексей aka kpblc
Moderator

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


Не-а, проблема в том, что построение дуг выполняется на математике, которую надо прописывать.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 23.11.2008, 12:53
#6
zamtmn

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


вот работающий кусок
Код:
[Выделить все]
        A:= tarcrtmodify(ptdata^).p2.x - tarcrtmodify(ptdata^).p1.x;
        B:= tarcrtmodify(ptdata^).p2.y - tarcrtmodify(ptdata^).p1.y;
        C:= tarcrtmodify(ptdata^).p3.x - tarcrtmodify(ptdata^).p1.x;
        D:= tarcrtmodify(ptdata^).p3.y - tarcrtmodify(ptdata^).p1.y;

        E:= A*(tarcrtmodify(ptdata^).p1.x + tarcrtmodify(ptdata^).p2.x) + B*(tarcrtmodify(ptdata^).p1.y + tarcrtmodify(ptdata^).p2.y);
        F:= C*(tarcrtmodify(ptdata^).p1.x + tarcrtmodify(ptdata^).p3.x) + D*(tarcrtmodify(ptdata^).p1.y + tarcrtmodify(ptdata^).p3.y);

        G:= 2*(A*(tarcrtmodify(ptdata^).p3.y - tarcrtmodify(ptdata^).p2.y)-B*(tarcrtmodify(ptdata^).p3.x - tarcrtmodify(ptdata^).p2.x));
        if abs(g)>eps then
        begin
        p_x:= (D*E - B*F) / G;
        p_y:= (A*F - C*E) / G;
        rr:= sqrt(sqr(tarcrtmodify(ptdata^).p1.x - p_x) + sqr(tarcrtmodify(ptdata^).p1.y - p_y));
        pgdbobjarc(tobj)^.r:=rr;
        pgdbobjarc(tobj)^.Local.p_insert.x:=p_x;
        pgdbobjarc(tobj)^.Local.p_insert.y:=p_y;
        pgdbobjarc(tobj)^.Local.p_insert.z:=0;
        tv.x:=p_x;
        tv.y:=p_y;
        pgdbobjarc(tobj)^.startangle:=vertexangle(tv,tarcrtmodify(ptdata^).p1);
        pgdbobjarc(tobj)^.endangle:=vertexangle(tv,tarcrtmodify(ptdata^).p3);
        if pgdbobjarc(tobj)^.startangle>pgdbobjarc(tobj)^.endangle then
        begin
                                                                                      rr:=pgdbobjarc(tobj)^.startangle;
                                                                                      pgdbobjarc(tobj)^.startangle:=pgdbobjarc(tobj)^.endangle;
                                                                                      pgdbobjarc(tobj)^.endangle:=rr
        end;
zamtmn вне форума  
 
Непрочитано 23.11.2008, 19:04
#7
Кулик Алексей aka kpblc
Moderator

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


Delphi, конечно, вещь хорошая, но спрашивали-то про VBA...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 23.11.2008, 20:38
#8
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,991
<phrase 1= Отправить сообщение для VVA с помощью Skype™


А если запросить 3 точки и построить дугу лиспом через SendCommand?
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 23.11.2008, 21:30
#9
zamtmn

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


>>Delphi, конечно, вещь хорошая, но спрашивали-то про VBA...
математике пофиг, что на делфи, что на вба
zamtmn вне форума  
 
Автор темы   Непрочитано 24.11.2008, 19:48
#10
ut2010


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


Цитата:
Кулик Алексей aka kpblc, Не-а, проблема в том, что построение дуг выполняется на математике, которую надо прописывать.
Я спрашивал про-то что в VBA же прописана уже эта математика, неужели ж нельзя её как-то использовать, ведь многих функций не хватает в VBA, доступных инструментами самого AutoCada. Например: мне надо поделить тот же эллипс на x кол-во равных кусков, дык я так извращался что бы это сделать, вместо того что б использовать типа point->divide

Цитата:
VVA, А если запросить 3 точки и построить дугу лиспом через SendCommand?
Можете поподробнее.


К сожалению в Delphi я пока не силен, но все равно спасибо за участие, мне хватило бы какой - нибудь формулы, на VBA я и сам напишу.
Подогнал я алгоритм построения (как всем известно центр окр-ти лежит на пересечении серединных перпендикуляров двух хорд) - через уравнение прямой вида Ax+By+C=0 (хорды), нашел уравнение прямой - серединного перпендикуляра, то же для второй хорды, ну а дальше по формуле - точку пересечения двух прямых (искомый центр окр-ти). Это в общих словах. В общем ничего сложного.


А как использовать код лиспа в VBA?
ut2010 вне форума  
 
Непрочитано 24.11.2008, 20:17
#11
zamtmn

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


дак тут голимая формула))
на tarcrtmodify(ptdata^). не обращай внимания. p1,p2,p3 - соответственно точки, .x и .y - икс и игрик координаты точек.
сначала расчитываются коофициенты A,B,C,D,G если G близок к нулю (eps) то точки лежат на прямой и дальше ниче не делаем, иначе считаем центр окружности - p_x и p_y и радиус - rr. потом считаем начальнуй и конечный угол дуги (vertexangle возвращает угол между вектором и осью x)
zamtmn вне форума  
 
Непрочитано 24.11.2008, 20:27
#12
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,991
<phrase 1= Отправить сообщение для VVA с помощью Skype™


ut2010,
Цитата:
Можете поподробнее.
Смотри
'Отправка имени любой команды Акада
'в командную строку и ее выполнение

Или в гугле набери ThisDrawing.SendCommand
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 24.11.2008, 22:46
#13
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


Цитата:
Я спрашивал про-то что в VBA же прописана уже эта математика, неужели ж нельзя её как-то использовать
"Этой математики" ни в VBA (и ни в Delphi) не прописано. В отношении AutoCAD они могут использовать только то, что прописано в объектной модели. И, разумеется собственные штатные функции. А далее - "голимые формулы". И, чтобы построить дугу по трем точкам объектным методом, надо изрядно пошевелить мозгами над геометрией.

В командах AutoCAD это "шевеление мозгами" зашито внутрь, и дугу можно построить разными способами.
ShaggyDoc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Построение дуги по 3 точкам в AutoCad

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
запуск программы из AutoCADа kminas Программирование 19 15.06.2012 13:42
AutoCAD Architecture 2008 построение нестандартных крышь Backbird Вертикальные решения на базе AutoCAD 4 27.06.2008 14:59
Построение дуги к заданной касательной KinSokol AutoCAD 11 29.02.2008 18:27
построение дуги эллипса в системе и деление её по длине на шесть одинаковых частей. Илья77 AutoCAD 11 05.02.2008 23:53
VBA AutoCad построение поверхности amrule Alexi Программирование 14 20.10.2006 13:33