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

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

Представление эллипса последовательностью радиусов.

Ответ
Поиск в этой теме
Непрочитано 22.11.2006, 14:25 #1
Представление эллипса последовательностью радиусов.
Pool
 
Москва
Регистрация: 18.10.2005
Сообщений: 61

При растягивании части окружности, кривая из правильной окружности преобразуется в эллипс. В дальнейшем, эту линию должен повторить фрезер с ЧПУ. А он может обрабатывать только по окружностям (или частям окружностей).

Вопрос.
Как грамотнее приблизить последовательность радиусных отрезков к форме имеющегося эллипса?
Можно ли это автоматизировать - для разового использования.

.............................................Павел.
Просмотров: 3125
 
Непрочитано 22.11.2006, 14:35
#2
Om81

Хочу быть фотографом :)
 
Регистрация: 21.10.2005
Москва, Кисловодск
Сообщений: 2,538
<phrase 1=


Во-первых, не радиусных отрезков, а дуг наверное? А то бред получается..
Во-вторых, по-моему еще на уроках черчения в школе учат, как построить окружности, максимально аппроксимирующие эллипс (по-крайней мере, получается гладкая кривая).
Om81 вне форума  
 
Автор темы   Непрочитано 22.11.2006, 15:04
#3
Pool


 
Регистрация: 18.10.2005
Москва
Сообщений: 61
Отправить сообщение для Pool с помощью Skype™


Цитата:
Сообщение от Om81
Во-первых, не радиусных отрезков, а дуг наверное?
Разумеется.
Цитата:
Сообщение от Om81
Во-вторых, по-моему еще на уроках черчения в школе учат, как построить окружности, максимально аппроксимирующие эллипс (по-крайней мере, получается гладкая кривая).
Школа....давно это было.
Вы имеете ввиду построение окружности по 3 точкам? Вот об этом и хотел уточнить.
Точность совпадения линий - допустим, 0,2 мм. Вы ручками предлагаете перебирать варианты? Методом научного тыка?
Уверен - есть способ поизящнее, о котором я просто не знаю.

.............................................Павел
Pool вне форума  
 
Непрочитано 22.11.2006, 15:13
#4
Om81

Хочу быть фотографом :)
 
Регистрация: 21.10.2005
Москва, Кисловодск
Сообщений: 2,538
<phrase 1=


Метод построения с общими касательными в месте сопряжения Если вам надо много и часто будет строить, то надо писать лиспы и т.п.. А если один раз - можно и подобрать
Om81 вне форума  
 
Непрочитано 22.11.2006, 15:19
#5
Om81

Хочу быть фотографом :)
 
Регистрация: 21.10.2005
Москва, Кисловодск
Сообщений: 2,538
<phrase 1=


Вот кстати если кто возьмется автоматизировать этот процесс: кое-что тут написано:
http://conf.bstu.ru/conf/docs/0037/1280.doc
Om81 вне форума  
 
Автор темы   Непрочитано 22.11.2006, 15:23
#6
Pool


 
Регистрация: 18.10.2005
Москва
Сообщений: 61
Отправить сообщение для Pool с помощью Skype™


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

............................................Павел.
Pool вне форума  
 
Непрочитано 22.11.2006, 15:53
#7
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,991
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Преобразуй элипсы в регионы и воспользуйся лиспом
Код:
[Выделить все]
(defun C:EXP_REGION ( / adoc el ssnab en item lays lay lock pell ptcen)
  (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
  (setq lays (vla-get-layers adoc))
  (vla-startundomark adoc)
  (setq el (entlast))
;;; (setq ssnab (ssget "_X" '((0 . "REGION"))))  ;_Если все Region'ы в рисунке
 (setq ssnab (ssget '((0 . "REGION"))))          ;_Выбор Region'ов в рисунке
  (while (and ssnab
	      (> (sslength ssnab) 0))
    (setq en (ssname ssnab 0))
    (setq item (vlax-ename->vla-object en))
    (setq lay (vla-item lays (vla-get-layer item)))
    (if (= (vla-get-lock lay) :vlax-true)
      (progn (vla-put-lock lay :vlax-false) (setq lock (cons lay lock))))
    (if (not (vl-catch-all-error-p 
           (vl-catch-all-apply 'vla-explode (list item))
	   ))
      (vla-Delete item))
    (ssdel en ssnab)
    )
  (if el
    (progn
       (setq ssnab nil ssnab (ssadd))
       (setq pell (getvar "PELLIPSE"))
       (setvar "PELLIPSE" 1)
       (while (setq el (entnext el))
	 (setq en (vlax-ename->vla-object el))
	 (setq item (vla-get-ObjectName en))
	 (cond ((= item "AcDbCircle") ;_"AcDbSpline"
		(setq ptcen (vlax-safearray->list
			      (vlax-variant-value (vla-get-center en))))
                (command "_ellipse" "_C" ptcen (polar ptcen 0 (vla-get-radius en)) "_R" 0)
		(mapcar '(lambda (x y)
			   (vlax-put-property (vlax-ename->vla-object (entlast)) x y))
			'(Linetype LineWeight Color Layer)
			(mapcar '(lambda (x)
				   (vlax-get-property en x))
			'(Linetype LineWeight Color Layer)))
         	(vla-Delete en)
		)
	       ((= item "AcDbEllipse")
		(setq ptcen (vlax-safearray->list
			      (vlax-variant-value (vla-get-center en))))
		(command "_ellipse" "_C" ptcen
			 (mapcar '+ ptcen
				 (vlax-safearray->list
				   (vlax-variant-value (vla-get-MajorAxis en))))
			 (mapcar '+ ptcen
				 (vlax-safearray->list
				   (vlax-variant-value (vla-get-MinorAxis en)))))
		(mapcar '(lambda (x y)
			   (vlax-put-property (vlax-ename->vla-object (entlast)) x y))
			'(Linetype LineWeight Color Layer)
			(mapcar '(lambda (x)
				   (vlax-get-property en x))
			'(Linetype LineWeight Color Layer)))
		(vla-Delete en)
		)
	       ((= item "AcDbSpline") nil );_Нужно ли?
	       (t (ssadd el ssnab))
	       )
	 )
       (if (> (sslength ssnab) 0)
	   (if (and (getvar "PEDITACCEPT") (= (getvar "PEDITACCEPT") 1))
	     (vl-cmdf "_pedit" "_Multiple" ssnab "" "_Join" 0 "")
             (vl-cmdf "_pedit" "_Multiple" ssnab "" "_Y" "_Join" 0 ""))
       )
       (setvar "PELLIPSE" pell)
      )
    )
  (setq ssnab nil)  
  (if lock (foreach x lock (vla-put-lock x :vlax-true)))
  (vla-endundomark adoc)
  (princ "\nПреобразование Регионов завершено")
  (princ)
)
Либо перечерти элипсы с установленной переменной PELLIPSE=1
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Представление эллипса последовательностью радиусов.

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

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