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

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

Программное создание сплайна

Ответ
Поиск в этой теме
Непрочитано 31.03.2014, 14:43 #1
Программное создание сплайна
Fedorino
 
автоматизация и организация черчения
 
Sterlitamak
Регистрация: 17.11.2009
Сообщений: 135

Добрый день! Подскажите чайнику как программно создать сплайн. Хотел задать вопрос в теме "Научите лиспу на примере", но постоянно кто-то перебивает. У меня слишком мало опыта программирования, чтобы додуматься до решения.
Нужно чтобы сплайн создавался по щелчкам левой кнопки мыши, а завершался правой, без контекст. меню и сразу замыкался, но при этом и вырисовывался сразу.
Бьюсь уже несколько дней, но пока не могу решить эту задачу.
Командным методом, не могу избежать контекст меню, а с помощью vla-AddSpline - предполагается уже задание нескольких точек сначало.
Подскажите в каком направлении искать?
Привожу свои коды, естественно все корявое, но я ведь новичок.
Командный метод. Недостаток: сразу не вырисовывается необходимый контур.
Код:
[Выделить все]
(setq x_lst nil)
(initget 1)
(setq pt (getpoint "Укажите точку: "))
(setq x_lst (cons pt x_lst))
(while (/= nil pt)
	(setq pt (getpoint pt "Укажите точку: "))
	(setq x_lst (cons pt x_lst))
) ; while конец
(setq x_lst (cdr x_lst))
(mapcar 'command (append '("_.spline") (reverse x_lst) '("_c" "")))
Метод activx. Тоже самое.
Код:
[Выделить все]
(setq x_lst nil)
(initget 1)
(setq pt (getpoint "Укажите точку: "))
(setq x_lst (cons pt x_lst))
(while (/= nil pt)
	(setq pt (getpoint pt "Укажите точку: "))
	(if (/= nil pt)
		(progn
			(setq x_lst (cons pt x_lst))
		)
	)		
) ; while конец
(setq tp (cons 0 (1- (* 3 (length x_lst)))))
; 
(setq actdoc (vla-get-ActiveDocument (vlax-get-acad-object)))
(setq obj (vla-get-ModelSpace actdoc))
(vla-AddSpline obj (vlax-safearray-fill
	(vlax-make-safearray vlax-vbDouble tp) ; vlax-make-safearray - создание безопасн. массива, vlax-vbDouble - тип данных массива (0.0), '(0 . 14) - кол-во данных, 0 - 1 данные.
	(setq pt_data (apply 'append x_lst))) ; применяет ф-цию apply ко всем элементам списка поочередно
	(vlax-3D-point '(0.0 0.0 0.0)) (vlax-3D-point '(0.0 0.0 0.0)))
(vl-cmdf "_SPLINEDIT" "_l" "_c" "")
__________________
слесарь САПР
Просмотров: 2618
 
Непрочитано 31.03.2014, 15:14
#2
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Цитата:
Сообщение от Fedorino Посмотреть сообщение
но при этом и вырисовывался сразу.
То есть, чтобы в процессе щелчков мышкой появлялись временные варианты, показывающие как он будет выглядеть, если точку тут указать?
Если так, то задачка для новичка неразрешимая. На лиспе такие вещи делать практически нереально, а то что получится, не всегда будет соответствовать ожиданиям.
Если еще не напугал, то ищите описание функции GRREAD - в первом приближении можно с ней поиграться. Есть примеры от Е.Елпанова, как эту функцию можно использовать для редактирования геометрии объектов. Если хочется более красиво - ищите ARX-дополнение DynDraw от А.Ривилиса. Гугол и поиск по форуму в помощь
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Автор темы   Непрочитано 31.03.2014, 15:28
#3
Fedorino

автоматизация и организация черчения
 
Регистрация: 17.11.2009
Sterlitamak
Сообщений: 135


Do$, спасибо за мнение и совет. На досуге посмотрю.
Но дело вот в чем. На данный момент у меня имеется макрос, привожу кусок кода:
Код:
[Выделить все]
_spline;\\\\\\\\\\_c;
в нем все строится по 10 точкам, а если нужно больше или меньше?
Хотел сделать все элегантно, с помощью lisp, строить левой точкой мыши, а заканчивать правой.
Но увы знаний не хватает.
__________________
слесарь САПР
Fedorino вне форума  
 
Непрочитано 31.03.2014, 15:39
#4
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Отслеживание нажатий клавиш мыши - тоже непростая для начинающего лиспера задачка.
Можно попробовать так использовать командные методы: сделать цикл ввода точек а по нажатию Enter завершать его и замыкать сплайн.
Подобные решения были на форуме для отрисовки полилинии, вроде. Ищите по названию переменной CMDACTIVE.
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Автор темы   Непрочитано 01.04.2014, 06:17
#5
Fedorino

автоматизация и организация черчения
 
Регистрация: 17.11.2009
Sterlitamak
Сообщений: 135


Do$, да, тоже сначало решал задачу расстановки точек, а затем построения сплайна, но увы это не так красиво.
Что ж оставим эту тему до лучших времен. Do$, спасибо за время потраченное на меня.
Буду решать задачи, которые мне по силам.
__________________
слесарь САПР
Fedorino вне форума  
 
Непрочитано 01.04.2014, 11:06
#6
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Ну как же, вот эта тема:
http://forum.dwg.ru/showthread.php?p=909063#post909063
Переделать под сплайн несложно будет.

P.S. https://chronicle.autodesk.com/main/...9-5cf49a41cb45
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)

Последний раз редактировалось Do$, 01.04.2014 в 11:13.
Do$ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Программное создание сплайна



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
программное создание размеров в dxf файле _Oleg_ Программирование 4 01.02.2011 16:36
Создание из эллипса, сплайна и дуги полилинии Zorroko AutoCAD 2 11.02.2010 16:13
Программное создание PlotConfiguration Sleekka Программирование 2 17.09.2008 20:48
Программное создание vport`ов Ax3 Программирование 10 29.08.2007 16:02
Создание surface из сплайна или полилинии WinDer AutoCAD 2 02.02.2006 10:17