Новая версия сайта, доступна здесь.
Дуговые сегменты полилиний и дуги
Площадь дугового сегмента, заданного центральным углом дуги и радиусом
Площадь дугового сегмента полилинии, заданного двумя точками и кривизной
Длинна дугового сегмента полилинии, заданного кривизной и длинной хорды
Радиус дугового сегмента полилинии, заданного кривизной и длинной хорды (вариант 1)
Радиус дугового сегмента полилинии, заданного кривизной и длинной хорды (вариант 2)
Радиус и центр дугового сегмента полилинии, заданного двумя точками и кривизной
Центр дуги, заданной тремя точками
Тангенс четверти угла(bulge) дуги, заданной тремя точками
Радиус дуги, заданной тремя точками
Центр и радиус дуги, заданной тремя точками
Создание списка для создания полилинии, по геометрии дуги
Нахождение тангенса четверти угла дуги (bulge), по начальному и конечному углу дуги
Принадлежность точки дуге, заданной тремя точками
Замена линейного сегмента полилинии дуговым сегментом
Замена дугового сегмента полилинии линейным сегментом
Площадь сегмента круга
eea-s_circle_segment.jpg (47 KБ)
;; eea-s_circle_segment.lsp (defun eea-s_circle_segment (r a) ;| ***************************************************************************************** by ElpanovEvgeniy Библиотечная функция, Площадь сегмента круга r - радиус круга а - угол сегмента Дата создания 2000 - 2005 годы ***************************************************************************************** Library function. The area of a segment of a circle r - circle radius a - angle segment Date of creation 2000 - 2005 years. ***************************************************************************************** (setq p1 (getpoint "\n Select centre circle") p2 (getpoint p1 "\n Select start point") p3 (getpoint p1 "\n Select end point") r (distance p1 p2) a1(angle p1 p3) a2 (angle p1 p2) a (if (< a1 a2)(+ pi pi (- a1 a2))(- a1 a2)) ) ;_ setq (eea-s_circle_segment r a) ***************************************************************************************** |; (* a r r 0.5) ) ;_ defun
Площадь дугового сегмента, заданного центральным углом дуги и радиусом
eea-s_arc.jpg (45 КБ)
(defun eea-s_arc (r a) ;| ***************************************************************************************** by ElpanovEvgeniy Библиотечная функция, Площадь дугового сегмента, заданного центральным углом дуги и радиусом r - радиус дуги а - центральный угол дуги Дата создания 2000 - 2005 годы ***************************************************************************************** Library function. The area of the arc segment set by the central angle of an arch and radius r - arc radius a - center arc angle Date of creation 2000 - 2005 years. ***************************************************************************************** (setq p1 (getpoint "\n Select centre arc") p2 (getpoint p1 "\n Select start point") p3 (getpoint p1 "\n Select end point") r (distance p1 p2) a1(angle p1 p3) a2 (angle p1 p2) a (if (< a1 a2)(+ pi pi (- a1 a2))(- a1 a2)) ) ;_ setq (eea-s_arc r a) ***************************************************************************************** |; (if (< a 0) (setq a (+ a pi pi)) ) ;_ if (* r r 0.5 (- a (sin a))) ) ;_ defun
Площадь дугового сегмента полилинии, заданного двумя точками и кривизной
eea-s_lw_segment.jpg (52 КБ)
(defun eea-s_lw_segment (p1 p2 b / a) ;| ***************************************************************************************** by ElpanovEvgeniy Библиотечная функция, Площадь дугового сегмента полилинии, заданного двумя точками и кривизной Положительная, при повороте дуги, против часовой стрелки. p1 - начальная точка дугового сегмента p2 - конечная точка дугового сегмента b - кривизна дугового сегмента (тангенс четверти центрального угла дуги). Дата создания 2000 - 2005 годы ***************************************************************************************** Library function. The area of a arc segment of lwpolyline Positive, at arch turn, counter-clockwise. p1 - start segment point p2 - end segment point b - bulge is the tangent of 1/4 of the included angle for the arc segment Date of creation 2000 - 2005 years. ***************************************************************************************** (setq e (entsel "\n Specify a polyline, in the necessary arc segment...") b (cdr (nth (fix (vlax-curve-getParamAtPoint (car e) (vlax-curve-getClosestPointTo (car e) (cadr e))) ) ;_ fix (vl-remove-if-not (function (lambda (x) (= (car x) 42))) (entget (car e))) ) ;_ nth ) ;_ cdr d (fix (vlax-curve-getParamAtPoint (car e) (vlax-curve-getClosestPointTo (car e) (cadr e))) ) ;_ fix p1 (vlax-curve-getPointAtParam (car e) d) p2 (vlax-curve-getPointAtParam (car e) (1+ d)) ) ;_ setq (eea-s_lw_segment p1 p2 b) ***************************************************************************************** |; (if (zerop b) 0.0 (progn (setq b (* 4 (atan b)) a (expt (/ (distance p1 p2) 2.82842712474619 (sin (/ b 2))) 2) ) ;_ setq (* a (- b (sin b))) ) ;_ progn ) ;_ if ) ;_ defun
Длинна дугового сегмента полилинии, заданного кривизной и длинной хорды
eea-lw_arc_len.jpg (50 KБ)
(defun eea-lw_arc_len (b d) ;| ***************************************************************************************** by ElpanovEvgeniy Библиотечная функция, Длинна дугового сегмента полилинии, заданного кривизной и длинной хорды d - расстояние между начальной и конечной точкой дугового сегмента b - кривизна дугового сегмента (тангенс четверти центрального угла дуги) Дата создания 2000 - 2005 годы ***************************************************************************************** Library function. It is length the arc segment of a polyline set by bulge and a length chord d - length chord b - bulge is the tangent of 1/4 of the included angle for the arc segment Date of creation 2000 - 2005 years. ***************************************************************************************** (setq e (entsel "\n Specify a polyline, in the necessary arc segment...") b (cdr (nth (fix (vlax-curve-getParamAtPoint (car e) (vlax-curve-getClosestPointTo (car e) (cadr e))) ) ;_ fix (vl-remove-if-not (function (lambda (x) (= (car x) 42))) (entget (car e))) ) ;_ nth ) ;_ cdr d (fix (vlax-curve-getParamAtPoint (car e) (vlax-curve-getClosestPointTo (car e) (cadr e))) ) ;_ fix d (distance (vlax-curve-getPointAtParam (car e) d) (vlax-curve-getPointAtParam (car e) (1+ d)) ) ;_ distance ) ;_ setq (eea-lw_arc_len b d) ***************************************************************************************** |; (* (atan b) d (+ b (/ 1. b))) ) ;_ defun
Радиус дугового сегмента полилинии, заданного кривизной и длинной хорды (вариант 1)
eea-lw_arc_len.jpg (50 KБ)
(defun eea-lw_arc_Rad_1 (b d) ;| ***************************************************************************************** by ElpanovEvgeniy Библиотечная функция, Радиус дугового сегмента полилинии, заданного кривизной и длинной хорды Вариант 1. d - расстояние между начальной и конечной точкой дугового сегмента b - кривизна дугового сегмента (тангенс четверти центрального угла дуги) Дата создания 2000 - 2005 годы ***************************************************************************************** Library function. It is radius the arc segment of a polyline set by bulge and a length chord Variant 1. d - length chord b - bulge is the tangent of 1/4 of the included angle for the arc segment Date of creation 2000 - 2005 years. ***************************************************************************************** (setq e (entsel "\n Specify a polyline, in the necessary arc segment...") b (cdr (nth (fix (vlax-curve-getParamAtPoint (car e) (vlax-curve-getClosestPointTo (car e) (cadr e))) ) ;_ fix (vl-remove-if-not (function (lambda (x) (= (car x) 42))) (entget (car e))) ) ;_ nth ) ;_ cdr d (fix (vlax-curve-getParamAtPoint (car e) (vlax-curve-getClosestPointTo (car e) (cadr e))) ) ;_ fix d (distance (vlax-curve-getPointAtParam (car e) d) (vlax-curve-getPointAtParam (car e) (1+ d)) ) ;_ distance ) ;_ setq (eea-lw_arc_Rad_1 b d) ***************************************************************************************** |; (* d (+ b (/ 1. b)) 0.25) ) ;_ defun
Радиус дугового сегмента полилинии, заданного кривизной и длинной хорды (вариант 2)
eea-lw_arc_len.jpg (50 KБ)
(defun eea-lw_arc_Rad_2 (b d) ;| ***************************************************************************************** by ElpanovEvgeniy Библиотечная функция, Радиус дугового сегмента полилинии, заданного кривизной и длинной хорды Вариант 2. d - расстояние между начальной и конечной точкой дугового сегмента b - кривизна дугового сегмента (тангенс четверти центрального угла дуги) Дата создания 2000 - 2005 годы ***************************************************************************************** Library function. It is radius the arc segment of a polyline set by bulge and a length chord Variant 2. d - length chord b - bulge is the tangent of 1/4 of the included angle for the arc segment Date of creation 2000 - 2005 years. ***************************************************************************************** (setq e (entsel "\n Specify a polyline, in the necessary arc segment...") b (cdr (nth (fix (vlax-curve-getParamAtPoint (car e) (vlax-curve-getClosestPointTo (car e) (cadr e))) ) ;_ fix (vl-remove-if-not (function (lambda (x) (= (car x) 42))) (entget (car e))) ) ;_ nth ) ;_ cdr d (fix (vlax-curve-getParamAtPoint (car e) (vlax-curve-getClosestPointTo (car e) (cadr e))) ) ;_ fix d (distance (vlax-curve-getPointAtParam (car e) d) (vlax-curve-getPointAtParam (car e) (1+ d)) ) ;_ distance ) ;_ setq (eea-lw_arc_Rad_1 b d) ***************************************************************************************** |; (/ d (sin (* 2 (atan b))) 2) ) ;_ defun
Радиус и центр дугового сегмента полилинии, заданного двумя точками и кривизной
eea-cen-lw-seg.jpg (52 KБ)
(defun eea-cen-lw-seg (p1 p2 b) ;| ***************************************************************************************** by ElpanovEvgeniy Библиотечная функция, Радиус и центр дугового сегмента полилинии, заданного двумя точками и кривизной p1 - начальная точка дугового сегмента p2 - конечная точка дугового сегмента b - кривизна дугового сегмента (тангенс четверти центрального угла дуги). Дата создания 2000 - 2005 годы ***************************************************************************************** Library function. Radius and the centre of an arc segment of the polyline set by two points and bulge p1 - start segment point p2 - end segment point b - bulge is the tangent of 1/4 of the included angle for the arc segment Date of creation 2000 - 2005 years. ***************************************************************************************** (setq e (entsel "\n Specify a polyline, in the necessary arc segment...") b (cdr (nth (fix (vlax-curve-getParamAtPoint (car e) (vlax-curve-getClosestPointTo (car e) (cadr e))) ) ;_ fix (vl-remove-if-not (function (lambda (x) (= (car x) 42))) (entget (car e))) ) ;_ nth ) ;_ cdr p1 (fix (vlax-curve-getParamAtPoint (car e) (vlax-curve-getClosestPointTo (car e) (cadr e))) ) ;_ fix p1 (vlax-curve-getPointAtParam (car e) d) p2 (vlax-curve-getPointAtParam (car e) (1+ d)) ) ;_ setq (eea-cen-lw-seg p1 p2 b) ***************************************************************************************** |; ((lambda (a v r) ((lambda (c s vx vy r) (list (list (+ (* (- (* vx c) (* vy s)) r) (car p1)) (+ (* (+ (* vx s) (* vy c)) r) (cadr p1)) ) ;_ list r ) ;_ list ) ;_ lambda (cos a) (sin a) (cos v) (sin v) r ) ) ;_ lambda (- 1.570796326794897 (* (atan b) 2.)) (angle p1 p2) (/ (distance p1 p2) 2. (sin (* (atan b) 2.))) ) ) ;_ defun
Центр дуги, заданной тремя точками
eea-cen_3pt.jpg (37 KБ)
(defun eea-cen_3pt (p1 p2 p3 / x1) ;| ***************************************************************************************** by ElpanovEvgeniy Библиотечная функция, Центр дуги, заданной тремя точками p1, p3 - конечные точки дуги порядок не важен p2 - любая точка, лежащая на дуге Дата создания 2000 - 2005 годы ***************************************************************************************** Library function. The centre of the arc set by three points p1, p3 - finishing points of an arc the order is not important p2 - Any point laying on an arc Date of creation 2000 - 2005 years. ***************************************************************************************** (setq p1 (getpoint "\n Start or end point") p3 (getpoint "\n Start or end point") p2 (getpoint "\n Any point laying on an arc") ) ;_ setq (eea-cen_3pt p1 p2 p3) ***************************************************************************************** |; (polar p3 (+ (angle p3 p2) (setq x1 (- (angle p1 p3) (angle p1 p2))) (* pi -0.5)) (/ (distance p2 p3) (sin x1) 2.) ) ;_ polar ) ;_ defun
Тангенс четверти угла(bulge) дуги, заданной тремя точками
eea-cen_3pt.jpg (37 KБ)
(defun eea-bulge_3pt (p1 p2 p3) ;| ***************************************************************************************** by ElpanovEvgeniy Библиотечная функция, Тангенс четверти угла(bulge) дуги, заданной тремя точками p1 - начальная точка дугового сегмента p2 - любая точка, лежащая на дуге p3 - конечная точка дугового сегмента Дата создания 2000 - 2005 годы ***************************************************************************************** Library function. Bulge is the tangent of 1/4 of the included angle for the arc segment set by three points p1 - start points of an arc segment p2 - Any point laying on an arc p3 - End points of an arc segment Date of creation 2000 - 2005 years. ***************************************************************************************** (setq p1 (getpoint "\n Start point") p2 (getpoint "\n Any point laying on an arc") p3 (getpoint "\n End point") ) ;_ setq (eea-bulge_3pt p1 p2 p3) ***************************************************************************************** |; ((lambda (a) (/ (sin a) (cos a))) (/ (- (angle p2 p3) (angle p1 p2)) 2.) ) ) ;_ defun
Радиус дуги, заданной тремя точками
eea-cen_3pt.jpg (37 KБ)
(defun eea-radius_3pt (p1 p2 p3) ;| ***************************************************************************************** by ElpanovEvgeniy Библиотечная функция, Радиус дуги, заданной тремя точками p1, p3 - конечные точки дуги порядок не важен p2 - любая точка, лежащая на дуге Дата создания 2000 - 2005 годы ***************************************************************************************** Library function. Radius of the arc set by three points p1, p3 - finishing points of an arc the order is not important p2 - Any point laying on an arc Date of creation 2000 - 2005 years. ***************************************************************************************** (setq p1 (getpoint "\n Start or end point") p2 (getpoint "\n Any point laying on an arc") p3 (getpoint "\n Start or end point") ) ;_ setq (eea-radius_3pt p1 p2 p3) ***************************************************************************************** |; (/ (distance p2 p3) (sin (- (angle p1 p3) (angle p1 p2))) 2.) ) ;_ defun
Центр и радиус дуги, заданной тремя точками
eea-cen_3pt.jpg (37 KБ)
(defun eea-cen_radius_3pt (p1 p2 p3 / x) ;| ***************************************************************************************** by ElpanovEvgeniy Библиотечная функция, Центр и радиус дуги, заданной тремя точками p1, p3 - конечные точки дуги порядок не важен p2 - любая точка, лежащая на дуге Дата создания 2000 - 2005 годы ***************************************************************************************** Library function. Center and radius of the arc set by three points p1, p3 - finishing points of an arc the order is not important p2 - Any point laying on an arc Date of creation 2000 - 2005 years. ***************************************************************************************** (setq p1 (getpoint "\n Start or end point") p2 (getpoint "\n Start or end point") p3 (getpoint "\n Any point laying on an arc") ) ;_ setq (eea-cen_radius_3pt p1 p2 p3) ***************************************************************************************** |; (list (polar p3 (+ (angle p3 p2) (setq x (- (angle p1 p3) (angle p1 p2))) (* pi -0.5) ) (setq x (/ (distance p2 p3) (sin x) 2.)) ) ;_ polar (abs x) ) ;_ list ) ;_ defun
Создание списка для создания полилинии, по геометрии дуги
(defun eea-lw_lst_arc (e / A A1 A2 PT R) ;| ***************************************************************************************** by ElpanovEvgeniy Библиотечная функция, Создание списка для создания полилинии, по геометрии дуги e - дуга возвращает список: '("Начальная точка" "Тангенс" "Конечная точка") Дата создания 2000 - 2005 годы ***************************************************************************************** Library function. Creation of the list for a polyline, on arc geometry e - arc entity Returns the list: ' ("Start point" "bulge" "End point") Date of creation 2000 - 2005 years. ***************************************************************************************** (setq e (car (entsel "\n Select arc "))) (eea-lw_lst_arc e) ***************************************************************************************** |; (setq e (entget e) r (cdr (assoc 40 e)) pt (cdr (assoc 10 e)) a1 (cdr (assoc 50 e)) a2 (cdr (assoc 51 e)) ) ;_ setq (if (minusp (setq a (- a2 a1))) (setq a (/ (+ pi pi a) 4)) (setq a (/ a 4)) ) ;_ if (list (polar pt a1 r) (/ (sin a) (cos a)) (polar pt a2 r)) ) ;_ defun
Нахождение тангенса четверти угла дуги (bulge), по начальному и конечному углу дуги
eea-bulge_start-a_end-a.jpg (46 KБ)
(defun eea-bulge_start-a_end-a (a1 a2 / A) ;| ***************************************************************************************** by ElpanovEvgeniy Библиотечная функция, Нахождение тангенса четверти угла дуги (bulge), по начальному и конечному углу дуги a1 - начальный угол дуги a2 - конечный угол дуги Дата создания 2000 - 2005 годы ***************************************************************************************** Library function. Bulge is the tangent of 1/4 of the included angle for the arc segment, set by on an start and end angle of an arc a1 - An start angle of an arc a2 - A end angle of an arc Date of creation 2000 - 2005 years. ***************************************************************************************** (setq e (car (entsel "\n Select arc ")) a1 (cdr (assoc 50 (entget e))) a2 (cdr (assoc 51 (entget e))) ) ;_ setq (eea-bulge_start-a_end-a a1 a2) ***************************************************************************************** |; (if (minusp (setq a (- a2 a1))) (setq a (/ (+ pi pi a) 4)) (setq a (/ a 4)) ) ;_ if (/ (sin a) (cos a)) ) ;_ defun
Принадлежность точки дуге, заданной тремя точками
eea-cen_3pt.jpg (37 KБ)
(defun eea-is-point-on-arc (P P1 P2 P3 fuzz) ;| ***************************************************************************************** by ElpanovEvgeniy Библиотечная функция, Принадлежность точки дуге, заданной тремя точками p - проверяемая точка p1, p3 - конечные точки дуги порядок не важен p2 - любая точка, лежащая на дуге fuzz - Точность Дата создания 2000 - 2005 годы ***************************************************************************************** Library function. Membership of a point to an arc set by three points p - a checked point p1, p3 - finishing points of an arc the order is not important p2 - Any point laying on an arc Date of creation 2000 - 2005 years. ***************************************************************************************** (setq p (getpoint "\n Any point") p1 (getpoint "\n Start or end point") p2 (getpoint "\n Any point laying on an arc") p3 (getpoint "\n Start or end point") fuzz 1e-3 ) (eea-is-point-on-arc P P1 P2 P3 fuzz) ***************************************************************************************** |; (or (equal p p1 fuzz) (equal p p3 fuzz) (equal (- (angle p2 p3) (angle p1 p2)) (- (angle p p3) (angle p1 p)) fuzz) ) ;_ or )
Замена линейного сегмента полилинии дуговым сегментом
LW_ARC.gif (244 КБ)
(defun C:LW_ARC (/ I LW P1 P2 P3) ;| ***************************************************************************************** by ElpanovEvgeniy Замена линейного сегмента полилинии дуговым сегментом Впервые опубликована http://www.caduser.ru/cgi-bin/f1/board.cgi?t=20707ki Дата создания 19.09.2005 Последняя редакция 04.06.2006 ***************************************************************************************** Replacement of a linear segment of a polyline with an arc segment For the first time it is published http://www.caduser.ru/cgi-bin/f1/board.cgi?t=20707ki Date of creation 19.09.2005 Last edition 04.06.2006 ***************************************************************************************** (C:LW_ARC) ***************************************************************************************** |; (vl-load-com) (or doc (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))) (if (and (setq lw (entsel "\n Select segment in a polyline. ")) (= (cdr (assoc 0 (entget (car lw)))) "LWPOLYLINE") ) ;_ and (progn (setq i (fix (vlax-curve-getParamAtPoint (car lw) (vlax-curve-getClosestPointTo (car lw) (cadr lw)) ) ;_ vlax-curve-getParamAtPoint ) ;_ fix p1 (vlax-curve-getPointAtParam (car lw) i) p3 (vlax-curve-getPointAtParam (car lw) (1+ i)) lw (vlax-ename->vla-object (car lw)) ) ;_ setq (princ "\n Set visually curvature of a segment. ") (vla-StartUndoMark doc) (while (and (setq p2 (grread 5)) (= (car p2) 5)) (vla-SetBulge lw i ((lambda (a) (/ (sin a) (cos a))) (/ (- (angle (cadr p2) p3) (angle p1 (cadr p2))) 2.) ) ) ;_ vla-SetBulge ) ;_ while (vla-EndUndoMark doc) ) ;_ progn (princ "\n It is select nothing or object not a polyline. ") ) ;_ if ) ;_ defun
Замена дугового сегмента полилинии линейным сегментом
lw-arc-.gif (160 КБ)
(defun c:lw-arc- (/ lw) ;| ***************************************************************************************** by ElpanovEvgeniy Замена дугового сегмента полилинии линейным сегментом Впервые опубликована http://www.caduser.ru/cgi-bin/f1/board.cgi?t=20707ki Дата создания 19.09.2005 Последняя редакция 04.06.2006 ***************************************************************************************** Replacement of a arc segment of a polyline with an linear segment For the first time it is published http://www.caduser.ru/cgi-bin/f1/board.cgi?t=20707ki Date of creation 19.09.2005 Last edition 04.06.2006 ***************************************************************************************** (C:LW_ARC-) ***************************************************************************************** |; (vl-load-com) (or doc (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))) (if (and (setq lw (entsel "\n Select arc segment in a polyline. ")) (= (cdr (assoc 0 (entget (car lw)))) "LWPOLYLINE") ) ;_ and (progn (vla-StartUndoMark doc) (vla-SetBulge (vlax-ename->vla-object (car lw)) (fix (vlax-curve-getParamAtPoint (car lw) (vlax-curve-getClosestPointTo (car lw) (cadr lw)) ) ;_ vlax-curve-getParamAtPoint ) ;_ fix 0. ) ;_ vla-SetBulge (vla-EndUndoMark doc) ) ;_ progn (princ "\n It is select nothing or object not a polyline. ") ) ;_ if ) ;_ defun