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

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

Как автоматизировать построение окружности по 3 точкам

Ответ
Поиск в этой теме
Непрочитано 19.11.2017, 17:42 #1
Как автоматизировать построение окружности по 3 точкам
DmAK
 
Регистрация: 28.10.2010
Сообщений: 20

Помогите с автоматизацией простейшей задачи пожалуйста.
Есть 3 точки. по ним необходимо построить окружность.
Выбирать каждый раз в меню "3Т", а потом еще и тыкать в каждую точку - занимает много времени, когда точек много.
Знаю что можно как-то сделать выбор 3-х точек рамкой. И далее строилась окружность по выбранным 3 точкам. даже есть наброски начала кода:
Код:
[Выделить все]
 (defun C:3tochky (/ snp nabor listt1 listt1 t1 t2 X Y X1 Y1 X2 Y2 t3)

(setq snp (getvar "Osmode")) 
(setvar "Osmode" 8) 
(setq nabor (ssget "_:L" '(( 0 . "POINT")))); imya nabora 
(setq listt1 (entget (ssname nabor 0)))
(setq listt2 (entget (ssname nabor 1)))
(setq listt3 (entget (ssname nabor 2)))
(setq t1 (cdr (assoc 10 listt1)))
(setq t2 (cdr (assoc 10 listt2)))
(setq t3 (cdr (assoc 10 listt3)))
(setq X (nth 0 t1))
(setq Y (nth 1 t1))

(setq X1 (nth 0 t2))
(setq Y1 (nth 1 t2))

(setq X2 (nth 0 t3))
(setq Y2 (nth 1 t3))

;(setq X3 (/ (+ X X1) 2))
;(setq Y3 (/ (+ Y Y1) 2))

;(Setq t3 (list X2 Y2))

(command "_.layer" "_s" "Кос Точки" "")
(setvar "CECOLOR" "4")
(command "_point" "_none" t3) ; "P.S. Знаменитые грабли тебя не миновали" "_none" - принудительное снятие привязки
(command "_.layer" "_s" "0" "")
(setvar "CECOLOR" "bylayer")

(entdel (ssname nabor 0))
(entdel (ssname nabor 1))

(command "_circle" "_none" t1 "0.5")
(command "_circle" "_none" t2 "0.5")

(setq nabor nil)
(setvar "Osmode" snp) 
)
Но мне не хватает знаний чтоб в "command.." команда circle выбирала эти три точки, которые я присваиваю переменным и строила окружность по субменю команды 3T (по трем точкам)
Просмотров: 2588
 
Непрочитано 19.11.2017, 17:47
#2
Кулик Алексей aka kpblc
Moderator

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


Как самый простой вариант - (command "_.circle" "_3t" "_none" listt1 "_none" listt2 "_none " listt3)
Хотя я бы, наверное, предпочел другой метод, без использования команд.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 19.11.2017, 17:59
#3
Setvar


 
Регистрация: 10.02.2007
Москва
Сообщений: 611


Не берусь обсуждать выбор точек рамкой, поскольку для самих точек не ясна принадлежность.
Как самый простой вариант использования команды "_CIRCLE" ("КРУГ"):
Код:
[Выделить все]
(command "_CIRCLE" "_3P" "_none" pt1 "_none" pt2 "_none" pt3)
Setvar вне форума  
 
Непрочитано 19.11.2017, 18:05
#4
Кулик Алексей aka kpblc
Moderator

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


Setvar, я уже очень давно не пользуюсь командами, поэтому с опцией мог ошибиться
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 19.11.2017, 18:07
#5
DmAK


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


"_3t" не срабатывает. просит ввести указать вариант построения окружности, как если б я пользовался обычной командой

----- добавлено через ~5 мин. -----
Вот такой код ?

Код:
[Выделить все]
 (defun C:3tochky (/ snp nabor listt1 listt2 listt3 t1 t2 t3 X Y X1 Y1 X2 Y2 X3 Y3)

(setq snp (getvar "Osmode")) 
(setvar "Osmode" 8) 
(setq nabor (ssget "_:L" '(( 0 . "POINT")))); imya nabora 
(setq listt1 (entget (ssname nabor 0)))
(setq listt2 (entget (ssname nabor 1)))
(setq listt3 (entget (ssname nabor 2)))

(command "_.layer" "_s" "Точки" "")
(setvar "CECOLOR" "4")
(command "_.circle" "_3p" "_none" listt1 "_none" listt2 "_none " listt3)
(command "_.layer" "_s" "0" "")
(setvar "CECOLOR" "bylayer")

(entdel (ssname nabor 0))
(entdel (ssname nabor 1))

(setq nabor nil)
(setvar "Osmode" snp) 
)
У меня не работает, может где-то ошибка?

Последний раз редактировалось DmAK, 19.11.2017 в 18:13.
DmAK вне форума  
 
Непрочитано 19.11.2017, 18:26
#6
Setvar


 
Регистрация: 10.02.2007
Москва
Сообщений: 611


Из-за этих "listt1" даже заморачиваться нет желания.
Заморачиваться нет желания, но порассуждать можно.
Откуда точки взялись, если их много? И это именно объекты AutoCAD'а "Точка" ("Point")? Их вообще видно на чертеже (имеется в виду вид точки)?
Каков критерий выбора точек? А если точки вдруг окажутся на 1 прямой? А если из 3 точек 2 совпали? А если все 3 совпали?
Код совершенно бредовый, поэтому и заморачиваться неохота.

Последний раз редактировалось Setvar, 19.11.2017 в 18:47.
Setvar вне форума  
 
Автор темы   Непрочитано 19.11.2017, 20:13
#7
DmAK


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


Точки являются точками в автокаде. выбирать буду по три точки. Эти точки отсняты по краям люка. Таким образом я нахожу центр люка, но люков 300 штук, на каждом люке по 3 точки итого 900 раз ткнуть точку.

----- добавлено через ~29 мин. -----
Заработало, вот мой окончательный вариант, если кому нужно, пользуйтесь...
P.S. Всем кто оказался неравнодушным - Большое Человеческое Спасибо!!!

Код:
[Выделить все]
 (defun C:3tochky (/ snp nabor listt1 listt2 listt3 t1 t2 t3)

(setq snp (getvar "Osmode")) 
(setvar "Osmode" 8) 
(setq nabor (ssget "_:L" '(( 0 . "POINT")))); imya nabora 
(setq listt1 (entget (ssname nabor 0)))
(setq listt2 (entget (ssname nabor 1)))
(setq listt3 (entget (ssname nabor 2)))
(setq t1 (cdr (assoc 10 listt1)))
(setq t2 (cdr (assoc 10 listt2)))
(setq t3 (cdr (assoc 10 listt3)))
(command "_.layer" "_s" "Точки" "")
(setvar "CECOLOR" "4")
(command "_.circle" "_3p" "_none" t1 "_none" t2 "_none" t3)
(command "_.layer" "_s" "0" "")
(setvar "CECOLOR" "bylayer")

;(entdel (ssname nabor 0)) если надо удалить точки
;(entdel (ssname nabor 1)) если надо удалить точки
;(entdel (ssname nabor 2)) если надо удалить точки

(setq nabor nil)
(setvar "Osmode" snp) 
)

Последний раз редактировалось DmAK, 19.11.2017 в 20:43.
DmAK вне форума  
 
Непрочитано 19.11.2017, 20:44
#8
Alex.gomel


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


Если очень коротко:
Код:
[Выделить все]
 (setq nabor (ssget "_:L" '(( 0 . "POINT"))))
(command "_.circle" "_3p" (cdr (assoc 10 (entget(ssname nabor 0)))) (cdr (assoc 10 (entget(ssname nabor 1)))) (cdr (assoc 10 (entget(ssname nabor 2)))) "")
Alex.gomel вне форума  
 
Автор темы   Непрочитано 19.11.2017, 21:10
#9
DmAK


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


Класс!!! Спасибо!
DmAK вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как автоматизировать построение окружности по 3 точкам

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Построение 2D-полилинии по точкам из файла в excel AutoCAD 2016 _TOD_ AutoCAD 9 29.10.2016 08:52
Построение окружности по двух касательным и точке на окружности fasadel AutoCAD 6 28.09.2016 09:30
Построение дуги заданного радиуса касательной к окружности. Как? T-Yoke AutoCAD 4 17.04.2013 12:14
Построение полилинии по точкам из текстового файла LiSa AutoCAD 4 16.04.2013 16:49
Построение дуги по 3 точкам в AutoCad ut2010 Программирование 12 24.11.2008 22:46