jan_ek 发表于 2022-7-5 19:38:35

多段线-凸出

你好
我希望不使用命令创建多段线,将数据点(1,2,3,4,5)作为附件草图和直径弯曲。
如何计算圆弧的起点和终点,而不考虑方向和正确的凸出值

Lee Mac 发表于 2022-7-5 19:45:26

首先计算圆弧端点和中心的位置(基于相邻多段线线段和所需的圆弧半径),然后圆弧段的凸出量等于四分之一夹角的切线。
 
有关更多信息,请参阅我的凸出转换函数。

jan_ek 发表于 2022-7-5 19:56:21

嗨,谢谢你有趣的阅读。事实证明,我克服的第一个计算问题是坐标系中的坐标。我希望很快就想训练。

VVA 发表于 2022-7-5 20:02:27

ElpanoveGeniy网站的另一个有趣链接是:将多段线的直线段替换为圆弧段
 
 

jan_ek 发表于 2022-7-5 20:07:33

我首先编写了一个计算向量之间角度的函数。不幸的是,在我看来,我的推理有些地方是错误的。你能看看下面的函数吗。
(defun wek (Pk1 Pk2 Pk3 / W1 W2 CosAlfa)
(setq W1 (list (- (car Pk2) (car Pk1)) (- (cadr Pk2) (cadr Pk1)))) ;wsp1
(setq W2 (list (- (car Pk3) (car Pk2)) (- (cadr Pk3) (cadr Pk2)))) ;wsp2
(setq CosAlfa (/ (+ (* (car W1)(car W2)) (* (cadr W1)(cadr W2)))
                (*(sqrt (+ (* (car W1) (car W1)) (*(car W2) (car W2) )))
                (sqrt (+ (* (cadr W1) (cadr W1)) (*(cadr W2) (cadr W2) )))))
)
(RtD (atan (sqrt (- 1 (* CosAlfa CosAlfa))) CosAlfa))
)
; converts radians to degrees
(defun RtD (r) (* 180.0 (/ r pi)))
; converts degrees to radians
(defun DtR (d) (* pi (/ d 180.0)))

BIGAL 发表于 2022-7-5 20:10:52

第一个问题,你想一个半径为所有如果是这样,那么在这里搜索的代码已经完成。此外,最好以弧度重新调整角度,因为这是autocad的默认值,但请注意,零位于东方,并且它们是按时钟测量的。
 
您可以将pline的co ORD作为一个列表,因此您只需使用pt1 pt2、pt2 pt3在lisp中获取角度(角度pt1 pt2)
 
下面是一个co ord lisp示例
 

; pline co-ords example
; By Alan H
(defun getcoords (ent)
(vlax-safearray->list
   (vlax-variant-value
   (vlax-get-property
   (vlax-ename->vla-object ent)
   "Coordinates"
   )
   )
)
)

(defun co-ords2xy ()
; convert now to a list of xy as co-ords are x y x y x y if 3d x y z x y z
(setq len (length co-ords))
(setq numb (/ len 2)) ; even and odd check required
(setq I 0)
(repeat numb
(setq xy (list (nth i co-ords)(nth (+ I 1) co-ords) ))
; odd (setq xy (list (nth i co-ords)(nth (+ I 1) co-ords)(nth (+ I 2) co-ords) ))
(setq co-ordsxy (cons xy co-ordsxy))
(setq I (+ I 2))
)
)

; program starts here
(setq co-ords (getcoords (car (entsel "\nplease pick pline"))))
(co-ords2xy) ; list of 2d points making pline

(princ co-ordsxy)

 
像这样的选择是两分
 

ymg3 发表于 2022-7-5 20:18:15

 
简,
 
只需使用角度函数。
 

(defun ang3p (p1 p2 p3 / a)
(or 2pi (setq 2pi (* 2 pi)))
(abs (- (setq a (- (angle p2 p1)(angle p2 p3))) (* (fix (/ a pi)) 2pi)))
)

 
ymg公司

VVA 发表于 2022-7-5 20:23:20

也许这个话题会有用
挑战-查找闭合多段线的内角
 
将几何函数转换为LISP
 
3d_库。拉链

marko_ribar 发表于 2022-7-5 20:30:20

看,Jan,如果您试图在多段线的顶点处用圆对其进行圆角,请尝试以下代码:
 
否则,如果您只需要常规圆角,只需使用带有olyline选项和指定半径的命令fillet。。。
 
HTH,M.R。

Lee Mac 发表于 2022-7-5 20:36:43

考虑以下代码:
(defun c:fpoly(/idx rad sel)(initget 6)(if(and(setq rad(getdist“\n指定圆角半径:))(setq sel(ssget“_:L”'((0。“LWPOLYLINE”))))(repeat(setq idx(sslength sel))(LM:filletpoly(ssname sel(setq idx(1-idx)))rad))))(princ));;圆角多段线-Lee Mac;;尝试将给定半径的圆角应用于给定多段线的所有顶点;;ent-LWPolyline实体;;rad-圆角半径(defun LM:filletpoly(ent rad/enx hed lst)(setq enx(entget ent)hed(reverse(member(assoc 39 enx)(reverse enx)))lst(mapcar“cdr(vl remove if not)”(lambda(x)(=10(car x)))enx)lst(apply“append”(apply“mapcar(cons)”(lambda(v1 v2 v3/a1 a2 a3 di)(if(和v1 v2 v3(setq a1(角度v2 v1)a2(角度v2 v3)a3(rem(+pi pi(-a1 a2))(+pi pi pi))a3(-pi(最小a3(-pi pi)a3)))tn(tan(/a3 2.0))(非)(等于a3 0.0 1e-8))(setq di(*rad tn))(
页: [1] 2
查看完整版本: 多段线-凸出