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

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

Lisp Построение касательной к окружности в точке пересечения

Ответ
Поиск в этой теме
Непрочитано 08.10.2014, 03:53 #1
Lisp Построение касательной к окружности в точке пересечения
tehkonst
 
Регистрация: 25.10.2011
Сообщений: 132

Здравствуйте.

Нужна помощь в реализации маленького алгоритма:
- Сначала выделяется окружность и ряд отрезков.
- Если какой-нибудь из отрезков пересекает центр окружности и саму окружность, построить касательную в точке пересечения

В приложении 2 скрина, как это должно выглядеть "до" и "после".

Помогите, если не трудно.

Миниатюры
Нажмите на изображение для увеличения
Название: касательна1.PNG
Просмотров: 121
Размер:	15.8 Кб
ID:	136342  Нажмите на изображение для увеличения
Название: касательна2.PNG
Просмотров: 129
Размер:	20.2 Кб
ID:	136343  

Просмотров: 2536
 
Непрочитано 08.10.2014, 10:35
1 | #2
ciril

САПР
 
Регистрация: 29.09.2011
СПб
Сообщений: 283


Код:
[Выделить все]
 (defun c:tst  (/ x00 x01 x02 x03 x04 x05 x06 x07)
  (while (not (and (setq x00 (entsel "\nВыберите окружность..."))
		   (equal '(0 . "CIRCLE") (assoc 0 (setq x01 (entget (setq x00 (car x00))))))))
    (princ "\nОкружность не выбрана."))
  (redraw x00 3)
  (setq	x00 (vlax-ename->vla-object x00)
	x02 (cdr (assoc 10 x01))
	x01 (cdr (assoc 40 x01)))
  (princ "\nВыберите отрезки...")
  (while (not (setq x03 (ssget '((0 . "LINE"))))) (princ "\nОтрезки не выбраны."))
  (repeat (setq x04 (sslength x03))
    (or	(not
	  (vlax-curve-getparamatpoint (setq x05 (vlax-ename->vla-object (ssname x03 (setq x04 (1- x04)))))
				      x02))
	(minusp
	  (vlax-safearray-get-u-bound (setq x05 (vlax-variant-value (vla-intersectwith x00 x05 acextendnone)))
				      1))
	(repeat	(/ (length (setq x05 (vlax-safearray->list x05))) 3)
	  (entmake
	    (list '(0 . "LINE")
		  (cons 10 (polar (setq x06 (list (car x05) (cadr x05))) (- (setq x07 (angle x02 x06)) (/ pi 2)) x01))
		  (cons 11 (polar x06 (+ x07 (/ pi 2)) x01))))
	  (setq x05 (cdddr x05)))))
  (redraw (vlax-vla-object->ename x00) 4)
  (princ))
вот как-то так.
ciril вне форума  
 
Автор темы   Непрочитано 09.10.2014, 15:58
#3
tehkonst


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


Спасибо. По вашему коду я почти во всех используемых методах разобрался (непросто его все-таки читать).
В код стоит добавить ( vl-load-com ), иначе ошибку может выдать.
tehkonst вне форума  
 
Непрочитано 09.10.2014, 16:02
#4
ciril

САПР
 
Регистрация: 29.09.2011
СПб
Сообщений: 283


Да не за что. Читать сложней, чем писать. Согласен, нужно добавить.
ciril вне форума  
 
Непрочитано 01.05.2024, 21:42
#5
Psip


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


А нет ли алгоритма построения касательной от одной окружности к другой? Суть в следующем - есть некоторое оборудование, вокруг него зона безопасности. Оборудование бывает сблокировано в странные, на первый взгляд, конфигурации. В крайние точки оборудования ставлю окружности с одинаковым радиусом, потом поворачиваю ПСК по центрам окружности и строю касательные, потом обрезаю окружности и получается такая изогнутая граница. Нет ли лиспа, чтобы можно было просто указать нужные окружности, а остальное сделалось автоматически? Скрины прилагаю. Фиолетовое - оборудование, желтое - заготовка под зону безопасности, зеленое - финальная зона безопасности. Такого лиспа в готовом виде наверное нет, но если кто-то готов написать за скромное вознаграждение, то ... давайте обсудим.
Спасибо.
Миниатюры
Нажмите на изображение для увеличения
Название: 0001.png
Просмотров: 34
Размер:	10.4 Кб
ID:	262891  Нажмите на изображение для увеличения
Название: 0002.png
Просмотров: 35
Размер:	22.9 Кб
ID:	262892  Нажмите на изображение для увеличения
Название: 0003.png
Просмотров: 37
Размер:	4.9 Кб
ID:	262893  Нажмите на изображение для увеличения
Название: 0004.png
Просмотров: 36
Размер:	20.2 Кб
ID:	262894  
Psip вне форума  
 
Непрочитано 01.05.2024, 22:13
1 | #6
Кулик Алексей aka kpblc
Moderator

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


А чем при таких раскладах _.offset не нравится? Вкупе с offsetgaptype = 1 можно добиться интересных результатов ИМХО.

----- добавлено через 21 сек. -----
Ну или потом _chamfer применять
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 02.05.2024, 19:00
#7
Psip


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


А так действительно быстрее! Спасибо!
Psip вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp Построение касательной к окружности в точке пересечения



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Разорвать объекты в точках пересечения. BreakObjects. VVA Готовые программы 110 25.02.2022 07:33
Нужен lisp, показывающий все ли линии сходятся в одной точке. ВоваН LISP 8 01.05.2014 14:25
Построение дуги заданного радиуса касательной к окружности. Как? T-Yoke AutoCAD 4 17.04.2013 12:14
{Конкурс} Lisp. Задачки для студентов gomer LISP 10 05.01.2011 16:33
!!! HELP. как соеденить 2 окружности касательной? Bdod AutoCAD 4 31.05.2006 10:08