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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > LISP. Как выбрать полярные координаты вершин полилинии в CSV-файл?

LISP. Как выбрать полярные координаты вершин полилинии в CSV-файл?

Ответ
Поиск в этой теме
Непрочитано 04.05.2023, 16:38 #1
LISP. Как выбрать полярные координаты вершин полилинии в CSV-файл?
AcidBurn23071985
 
Регистрация: 04.08.2016
Сообщений: 12

Всем привет!
Помогите написать LISP cartesian_polar
для записи полярных координат вершин полилинии в CSV-файл.
Набросок кода ниже.
Заранее благодарю!

Решение от koMon.
Спасибо!

Последний раз редактировалось AcidBurn23071985, 20.05.2023 в 23:07.
Просмотров: 1168
 
Непрочитано 04.05.2023, 16:41
#2
Кулик Алексей aka kpblc
Moderator

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


А зачем вообще преобразование во vlax-variant ?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 04.05.2023, 16:54
#3
AcidBurn23071985


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


Убрал преобразование, код выше, ошибка та же...
AcidBurn23071985 вне форума  
 
Непрочитано 04.05.2023, 17:08
#4
Кулик Алексей aka kpblc
Moderator

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


Блин, да убери ты эти ненужные преобразования во vla. Все данные и так есть - читай DXF Reference.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 04.05.2023, 17:16
#5
AcidBurn23071985


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


Теперь "; ошибка: неверный тип аргумента: consp -5.24781". Я вообще не специалист в Lisp, помогите, пожалуйста...
AcidBurn23071985 вне форума  
 
Непрочитано 04.05.2023, 17:46
#6
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,095


(assoc 10 (entget (car obj)))
выдаст не список всех "точечных пар" с кодом 10, а только первую. А после cdr от нее останется только список координат одной вершины, потому и ошибка.
И вовсе не обязательно изобретать велосипед. Коды извлечения списка прямоугольных координат вершин полилинии легко находятся поиском, даже несколько вариантов. Остается пройтись по результату функцией преобразования в полярные координаты.

Последний раз редактировалось kp+, 04.05.2023 в 17:52.
kp+ вне форума  
 
Автор темы   Непрочитано 04.05.2023, 20:20
#7
AcidBurn23071985


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


kp+, нашёл несколько вариантов, но не нашёл функции преобразования в полярные координаты...
Обычно использую geo_table, но код слишком сложный, прикрутить туда преобразование в полярные координаты не смогу.

Последний раз редактировалось AcidBurn23071985, 04.05.2023 в 20:29.
AcidBurn23071985 вне форума  
 
Непрочитано 04.05.2023, 21:06
#8
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 470


Цитата:
...но не нашёл функции преобразования в полярные координаты...
Да ладно!

Обычный прямоугольный треугольник.

Катеты знаем (декартовы координаты).

А дальше "Квадрат гипотенузы равен сумме ... " +
одна тригонометрическая формула для вычисления
угла.

Школьный курс геометрии.

Реально проще самому программу составить, чем
найти эти несколько строк в готовом виде. :-)
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Автор темы   Непрочитано 04.05.2023, 21:21
#9
AcidBurn23071985


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


Алексей, спасибо за курс геометрии, но хотелось бы в виде LISP. ))
AcidBurn23071985 вне форума  
 
Непрочитано 04.05.2023, 21:21
#10
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,095


Цитата:
не нашёл функции преобразования в полярные координаты...
Ну так своя есть, начиная с (while (< i n)

Здесь еще можно посмотреть: https://forums.autodesk.com/t5/visua...e/td-p/8938179
kp+ вне форума  
 
Автор темы   Непрочитано 04.05.2023, 21:29
#11
AcidBurn23071985


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


kp+, не осилю...
AcidBurn23071985 вне форума  
 
Непрочитано 04.05.2023, 21:54
#12
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 470


Цитата:
спасибо за курс геометрии, но хотелось бы в виде LISP
Ну, LISP - так LISP.

См. описание функций (distance ...) и (angle ...)

между точкой (0 0) и своей (X Y)

"полярнистее" и не придумать, пожалуй. :-)
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 05.05.2023, 09:48
#13
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,681


Цитата:
Сообщение от AcidBurn23071985 Посмотреть сообщение
Но функция rec не нуждается в определении - она уже определена в строке (dolist (rec ent) ...).
ещё как нуждается. в упомянутой строке она не определяется, а вызывается. функция должна определятся внутри (defun rec ()...)
(ssget '((-4 . "<OR") (0 . "LWPOLYLINE")(-4 . "OR>"))))??? ==> (ssget '((0 . "LWPOLYLINE")))
функции dolist нет в автолиспе
тз стремительно видоизменяется))) откуда код? chat gpt потрудился?
__________________
K Lisp
koMon на форуме  
 
Автор темы   Непрочитано 05.05.2023, 10:05
#14
AcidBurn23071985


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


koMon
Предыдущие версии пробовал писать сам, последняя уже из ChatGPT.
Смысл ТЗ не меняется, но вот решение не находится. ))
AcidBurn23071985 вне форума  
 
Непрочитано 05.05.2023, 10:28
#15
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 470


Да там бред какой-то, а не код...
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 05.05.2023, 10:56
1 | #16
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,681


AcidBurn23071985,
ну можно например так.
Код:
[Выделить все]
 

;************************************************************************************************************************

(defun c:cartesian_polar (/ pline_sset csv_filename_full csv_id index)

	;********************************************************************************************************************

	(defun get_csv_filename (extension / output_name csv_filename)
			(setq output_name (strcat (vlax-get (vla-get-activedocument (vlax-get-acad-object)) 'path)
							   		  "\\"
									  (vl-filename-base (vlax-get (vla-get-activedocument (vlax-get-acad-object)) 'name))
							  )
			)
			(if (type acet-ui-getfile)
					(setq csv_filename (acet-ui-getfile "Введите имя файла CSV"
									     output_name
									     extension
									     ""
									     1
							   )
					)
					(setq csv_filename (getfiled "Введите имя файла CSV"
								      output_name
								      extension
								      1
							   )
					)
			)
			(if (= "" csv_filename)
				nil
				csv_filename
			)
	)

	;********************************************************************************************************************

	(defun write_vertices (pline_ename csv_id)
		(foreach vertex (mapcar 'cdr (vl-remove-if-not '(lambda (dxf_group) (= 10 (car dxf_group))) (entget pline_ename)))
			(write-line (strcat ";" (angtos (angle '(0 0 0) vertex) 0 2) ";" (rtos (distance '(0 0 0) vertex) 2 2)) csv_id)
		)
	)

	;********************************************************************************************************************

	(if (and
			 (setq pline_sset (ssget '((0 . "lwpolyline"))))
			 (setq csv_filename_full (get_csv_filename "csv"))
			 (setq csv_id (open csv_filename_full "w"))
			 (setq index 0)
		)
			(progn
				(foreach pline (vl-remove-if 'listp (mapcar 'cadr (ssnamex pline_sset)))
					(write-line (strcat "Полилиния " (itoa (setq index (1+ index))) ";Угол;Расстояние")  csv_id)
					(write_vertices pline csv_id)
				)
				(close csv_id)
				(princ (strcat "Файл \"" csv_filename_full "\" записан"))
			)
	)
	(princ)
)

;************************************************************************************************************************

__________________
K Lisp

Последний раз редактировалось koMon, 05.05.2023 в 11:03.
koMon на форуме  
 
Автор темы   Непрочитано 05.05.2023, 11:40
#17
AcidBurn23071985


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


koMon
Большое спасибо! Всё работает!
AcidBurn23071985 вне форума  
 
Автор темы   Непрочитано 06.05.2023, 19:49
#18
AcidBurn23071985


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


Можно в этой же теме спросить, как построить полилинию по полярным координатам?
Обычно ввожу в AutoCAD команду _pline и вставляю в командную строку сцепку координат X,Y из Excel.
В итоге за доли секунд получается линия, нарисованная чётко по заданным координатам.
Тут выделяю в cartesian_polar.xlsx (в посте #1) сцепку @радиус<угол в D25:D206, но получается ерунда. ))
Тему "pline в полярных координатах" видел, перевести угол в радианы тоже пробовал - не помогло.
ЧЯДНТ?
AcidBurn23071985 вне форума  
 
Непрочитано 06.05.2023, 22:07
#19
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,681


нужно в экселе создать колонку X как радиус*cos угла, колонку Y как радиус*sin угла и из них сделать сцепку для команды _pline для построения полилинии в декартовых координатах.
__________________
K Lisp
koMon на форуме  
 
Автор темы   Непрочитано 06.05.2023, 22:20
#20
AcidBurn23071985


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


koMon, спасибо, выручили! Если перевести угол в радианы, всё отлично!

Последний раз редактировалось AcidBurn23071985, 06.05.2023 в 22:45.
AcidBurn23071985 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > LISP. Как выбрать полярные координаты вершин полилинии в CSV-файл?

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задание координаты Z у сплайна или полилинии при помощи команды???? alex_msu AutoCAD 30 01.03.2017 13:51
lisp: Длина по полилинии до точки vosh LISP 19 15.07.2013 15:10
Преобразование координат вершин полилинии из мировой системы координат в текущую молодой человек Программирование 1 16.01.2010 22:57
координаты вершин выбранной полилинии на VB? как получить ssv22 Программирование 5 17.07.2008 00:01
Изменение отметки Z вершин полилинии Mazai Программирование 5 27.05.2008 03:35