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

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

Линии и дуги в полилинии.

Ответ
Поиск в этой теме
Непрочитано 11.12.2008, 22:13
Mozgunov
 
Начинающий проектировщик
 
Санкт-Петербург
Регистрация: 07.02.2008
Сообщений: 443

Уважаемые программисты. Решил написать скрипт для своих нужд. Вроде всё устраивает, только нужно соединить все прорисованные линии в полилинию, только как бы это сделать попроще? Листинг кода ниже. Заранее спасибо!

Код:
[Выделить все]
(defun С:ugol ( ) 

(setvar "ORTHOMODE" 1)
(setvar "OSMODE"1)

(setq pt1 (getpoint "\n Первая точка: "))
(setq pt2 (getpoint "\n Вторая точка: "))
(setq dist1 (getdist "\n Диаметр огибаемой: "))
(setq dist2 (getdist "\n Диаметр огибающей: "))

(setq ugl (angle pt1 pt2));; Получаем уголок между точками от горизонтальной оси

(setq uglplus90 (+ ugl (/ pi 2) ) );;Угол плюс 90 в радианах
(setq uglplus180 (+ ugl  pi ) );;Угол плюс 180 в радианах
(setq uglplus270 (+ ugl  (* pi 1.5) ) );;Угол плюс 270 в радианах
(setq uglplus360 (+ ugl  (* pi 2.0) ) );;Угол плюс 360 в радианах

(setq uglminus90 (- ugl (/ pi 2) ) );;Угол плюс 90 в радианах
(setq uglminus180 (- ugl  pi ) );;Угол плюс 180 в радианах
(setq uglminus270 (- ugl  (* pi 1.5) ) );;Угол плюс 270 в радианах

(setq pt3 (POLAR pt1  uglplus90 (/ dist1 2) ));;точки примыкают к грани
(setq pt4 (POLAR pt2  uglplus90 (/ dist1 2) ));;точки примыкают к грани

(setq pt5 (POLAR pt1  uglplus90 (+ (/ dist1 2) dist2) ));;следующие от примыкания
(setq ptm5 (POLAR pt1  uglplus90 (/ dist1 2) ));;следующие от примыкания

(setq pt6 (POLAR pt2  uglplus90 (+ (/ dist1 2) dist2) ));;следующие от примыкания
(setq ptm6 (POLAR pt2  uglplus90  (/ dist1 2) ));;следующие от примыкания


(setq pt7 (POLAR pt1  uglplus180 (+ (/ dist1 2) dist2) ));;следующие от примыкания
(setq ptm7 (POLAR pt1  uglplus180 (/ dist1 2) ));;следующие от примыкания


(setq pt8 (POLAR pt2  ugl (+ (/ dist1 2) dist2) ));;следующие от примыкания
(setq ptm8 (POLAR pt2  ugl (/ dist1 2) ));;следующие от примыкания


(setq pt9 (POLAR pt1  uglplus270 (+ (/ dist1 2) dist2) ));;следующие от примыкания
(setq ptm9 (POLAR pt1  uglplus270 (/ dist1 2) ));;следующие от примыкания


(setq pt10 (POLAR pt2 uglminus90 (+ (/ dist1 2) dist2) ));;следующие от примыкания
(setq ptm10 (POLAR pt2 uglminus90  (/ dist1 2) ));;следующие от примыкания


;;Считаем хвостики 
;;;;;;;;;;;;;;;;;;

(setq pt11 ( POLAR pt9 uglplus360 (* 3 dist2)  ) );;для первого хвостика
(setq pt12 ( POLAR ptm9 uglplus360 (* 3 dist2)  ) );;для первого хвостика

(setq pt13 ( POLAR pt10 uglplus180 (* 3 dist2)  ) );;для первого хвостика
(setq pt14 ( POLAR ptm10 uglplus180 (* 3 dist2)  ) );;для первого хвостика

;;Прорисовка

(setvar "ORTHOMODE" 0)
(setvar "OSMODE"0)

(command "_.PLINE"  pt3 pt4 "") ;;

(command "_.PLINE"  pt5 pt6 "") ;;

(command "_.ARC"  pt5 pt7 pt9 ) ;;Внешняя дуга первого скругления
(command "_.ARC"  pt6 pt8 pt10 ) ;;Внешняя дуга второго скругления
(command "_.ARC"  ptm5 ptm7 ptm9 ) ;;Внутрянняя дуга первого скругления
(command "_.ARC"  ptm6 ptm8 ptm10 );;Внутрянняя дуга второго скругления

;;Рисуем хвостики
(command "_.PLINE"  pt9 pt11 pt12 ptm9 "") ;;
(command "_.PLINE"  pt10 pt13 pt14 ptm10 "") ;;
 


(setvar "ORTHOMODE" 1)
(setvar "OSMODE"1)
)
(setq tmposmode (getvar "osmode"))
это я уже доработал чтобы не вырубались привязки постоянно
__________________
dmtools.ru

Последний раз редактировалось Кулик Алексей aka kpblc, 11.12.2008 в 22:48.
Просмотров: 7624
 
Автор темы   Непрочитано 26.05.2009, 21:53
#21
Mozgunov

Начинающий проектировщик
 
Регистрация: 07.02.2008
Санкт-Петербург
Сообщений: 443
<phrase 1=


а можно ли взять тангенс не четверти а 1/8 ? А где посмотреть эти группы?

Последний раз редактировалось Mozgunov, 26.05.2009 в 22:09.
Mozgunov вне форума  
 
Непрочитано 26.05.2009, 22:01
#22
Кулик Алексей aka kpblc
Moderator

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


Посмотреть группы можно либо в DXF Reference, либо в книгах Н.Н.Полещука.
Взять - можно. Но каков результат будет? Или, точнее: а зачем?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 26.05.2009, 22:09
#23
Mozgunov

Начинающий проектировщик
 
Регистрация: 07.02.2008
Санкт-Петербург
Сообщений: 443
<phrase 1=


Вы сопрягали этим методом две параллельные прямые окружностью радиусом равным половине расстояния между этими прямыми. А если нужно сопречь две прямые проходящие перпендикулярно друг другу, точки начала и конца дуги, радиус извесны.
Mozgunov вне форума  
 
Непрочитано 26.05.2009, 22:25
#24
Кулик Алексей aka kpblc
Moderator

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


Так угол-то все равно не меняется... Мораль сей басня очень прост:
Код:
[Выделить все]
(defun get-bundle (degrees)
                  ;|
*    Получает тангенс четверти угла
*    Параметры вызова:
	degrees	угол, градусы
(get-bundle 180.)	; 1.0
(get-bundle 90.)	; 0.414214
|;
  (setq degrees (* (/ degrees 720.) pi))
  (/ (sin degrees) (cos degrees))
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 26.05.2009, 22:44
#25
Mozgunov

Начинающий проектировщик
 
Регистрация: 07.02.2008
Санкт-Петербург
Сообщений: 443
<phrase 1=


Т.е она переводит угол (какой угол?) в радианы, делит его на четыре и находит по трегонометрической формуле синус этого угла. Математическая часть вроде ясна. Но смысл прорисовки не могу понять. Какого угла ищется тангенс и как он связан с дугой сопряжения? Очень хочу разобраться! Спасибо!
Mozgunov вне форума  
 
Непрочитано 26.05.2009, 23:28
#26
CB

Конструирование в области нефтеразведки
 
Регистрация: 10.02.2006
Гомель
Сообщений: 321


Посмотри эту тему
CB вне форума  
 
Автор темы   Непрочитано 27.05.2009, 07:47
#27
Mozgunov

Начинающий проектировщик
 
Регистрация: 07.02.2008
Санкт-Петербург
Сообщений: 443
<phrase 1=


спасибо СВ ! Спасибо Алексей !
Mozgunov вне форума  
 
Непрочитано 26.01.2012, 14:08
#28
master-lomaster


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


Господа, есть ли возможность одной командой дугу в линию перевести?
master-lomaster вне форума  
 
Автор темы   Непрочитано 26.01.2012, 14:50
#29
Mozgunov

Начинающий проектировщик
 
Регистрация: 07.02.2008
Санкт-Петербург
Сообщений: 443
<phrase 1=


Командой врятли. А линия должна проходить через крайние точки дуги?
Mozgunov вне форума  
 
Непрочитано 26.01.2012, 14:56
#30
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,992


Цитата:
Сообщение от master-lomaster Посмотреть сообщение
Господа, есть ли возможность одной командой дугу в линию перевести?
Аппроксимировать линейными сегментами?
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 26.01.2012, 15:16
#31
master-lomaster


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


Аппроксимировать линейными сегментами?

да.

Разобрался, спасибо.

Последний раз редактировалось master-lomaster, 26.01.2012 в 15:25.
master-lomaster вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Линии и дуги в полилинии.

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание нового типа линий Apelsinov AutoCAD 915 08.07.2022 12:36
Несплошные линии, X-refы и... задача Vova AutoCAD 6 20.04.2018 16:14
Чем чертите Линии или Полилинии Mikhail AutoCAD 68 11.02.2013 09:52
Вес линии и стиль печати Barbi AutoCAD 22 26.04.2012 17:56
Загрузка типа линии из макроса Кулик Алексей aka kpblc Программирование 4 24.01.2005 14:57