429014673
发表于 2015-12-22 13:36:11
楼主,还缺函数呀
lcxing
发表于 2015-12-22 15:06:53
支持楼主,好东西
prcstone
发表于 2015-12-24 08:00:07
支持楼主
flowerson
发表于 2015-12-24 11:34:30
这个真是很有意义哦!有能力的支持支持!
jack093
发表于 2015-12-24 16:58:48
找到2个bug
1.比较角度前
(if (> aann (* 2.0 pi))
(setq aann (- aann (* 2.0 pi)))
)
(if (< aann (* -1.0 pi))
(setq aann (+ aann (* 2.0 pi)))
)
否则旋转对象无法匹配
2.变量an因为ang
(defun points_2_mrs(p1 p2 p1a ang sc /an sc x1 y1 x1a y1a x3 y3 x1s y1s ang13 d1s3 x3s y3s)
(setq x1 (car p1)y1 (cadr p1))
(setq x1a (car p1a)y1a (cadr p1a))
(setq x2 (car p2)y2 (cadr p2))
;;scale p2不动
(setq x1s (+ (* sc x1) (* (- 1 sc) x2)))
(setq y1s (+ (* sc y1) (* (- 1 sc) y2)))
;;rotate p1不动 后 p2坐标
(setq ang12 (angle p1 p2))
(setq d1s2 (sqrt(+ (*(- x1s x2)(- x1s x2))(*(- y1s y2)(- y1s y2)))))
(setq x2s (+ (* (cos (+ ang ang12)) d1s2)x1s))
(setq y2s (+ (* (sin (+ ang ang12)) d1s2)y1s))
;;move p1移到p1a 后 p2坐标
(list (+ x2s (- x1a x1s))(+ y2s (- y1a y1s))0)
)
已经可以对固定比例,旋转变比的匹配了(xyz不同比例不能匹配)
还剩下其它图元支持了
jack093
发表于 2016-1-6 15:26:41
本帖最后由 jack093 于 2016-1-6 16:49 编辑
支持图元增加
(defun find_eq_ent(ent ent2 pt p3 ang sc /flag ret nm p1 p2 p1a p2a aann sscc ptt r1 r2 a1 a2)
(setq flag nil ret nil)
(setq nm (cdr (assoc 0 ent)))
(setq p1 (cdr (assoc 10 ent)) p2 (cdr (assoc 10 ent2)))
(if (and
(= nm(cdr (assoc 0 ent2)))
(= (cdr (assoc 8 ent))(cdr (assoc 8 ent2)))
(= (cdr (assoc 62 ent))(cdr (assoc 62 ent2)))
(= (cdr (assoc 6 ent))(cdr (assoc 6 ent2)))
(= (cdr (assoc 48 ent))(cdr (assoc 48 ent2)))
)
(cond
((= nm "LINE")
(setq p1a (cdr (assoc 11 ent)) p2a (cdr (assoc 11 ent2)))
(setq sscc (/ (distance p2 p2a)(distance p1 p1a)))
(if (null sc)
(setq sc sscc)
(if (null(equal sc sscc 1e-7))
(setq flag t)
)
)
(if (null flag)
(progn
(setq aann (- (angle p2 p2a)(angle p1 p1a)))
(if (> aann (* 2.0 pi))
(setq aann (- aann (* 2.0 pi)))
)
(if (< aann (* -1.0 pi))
(setq aann (+ aann (* 2.0 pi)))
)
(if (null ang)
(setq ang aann)
(if (null(eq_angle_pi ang aann))
(setq flag t)
)
)
)
)
(if (null flag)
(progn
;;(setq ptt (triangle_2_mrs p1 p1a pt p2 p2a))
(setq ptt (points_2_mrs (midpoint p1 p1a) pt (midpoint p2 p2a) ang sc))
(if (null p3)
(setq p3 ptt)
(if (null(equal p3 ptt 1e-7))
(setq flag t)
)
)
(if (null flag)
(setq ret (list p3 ang sc))
)
)
)
)
((or(= nm "TEXT")(= nm "MTEXT"))
(if (and(= (cdr (assoc 1 ent))(cdr (assoc 1 ent2)))
(= (cdr (assoc 7 ent))(cdr (assoc 7 ent2)))
(= (cdr (assoc 71 ent))(cdr (assoc 71 ent2)))
(= (cdr (assoc 72 ent))(cdr (assoc 72 ent2)))
)
(progn
(setq a1 (cdr (assoc 50 ent))a2(cdr (assoc 50 ent2)))
(setq aann (- a2 a1))
(if (> aann (* 2.0 pi))
(setq aann (- aann (* 2.0 pi)))
)
(if (< aann (* -1.0 pi))
(setq aann (+ aann (* 2.0 pi)))
)
(if (null ang)
(setq ang aann)
(if (null(eq_angle ang aann))
(setq flag t)
(progn
(setq sscc (/ (cdr (assoc 40 ent2))(cdr (assoc 40 ent))))
(if (null sc)
(setq sc sscc)
(if (null(equal sc sscc 1e-7))
(setq flag t)
(progn
(setq ptt (points_2_mrs p1 pt p2 ang sc))
(if (null p3)
(setq p3 ptt)
(if (null(equal p3 ptt 1e-7))
(setq flag t)
)
)
(if (null flag)
(setq ret (list p3 ang sc))
)
)
)
)
)
)
)
)
)
)
((= nm "CIRCLE")
(setq sscc (/ (cdr (assoc 40 ent2))(cdr (assoc 40 ent))))
(if (null(equal sc sscc 1e-7))
(setq flag t)
(progn
(setq ptt (points_2_mrs p1 pt p2 ang sc))
(if (null(equal p3 ptt 1e-7))
(setq flag t)
(setq ret (list p3 ang sc))
)
)
)
)
((= nm "DIMENSION")
(setq p1a (cdr (assoc 11 ent)) p2a (cdr (assoc 11 ent2)))
(setq sscc (/ (distance p2 p2a)(distance p1 p1a)))
(if (null sc)
(setq sc sscc)
(if (null(equal sc sscc 1e-7))
(setq flag t)
)
)
(if (null flag)
(progn
(setq aann (- (angle p2 p2a)(angle p1 p1a)))
(if (> aann (* 2.0 pi))
(setq aann (- aann (* 2.0 pi)))
)
(if (< aann (* -1.0 pi))
(setq aann (+ aann (* 2.0 pi)))
)
(if (null ang)
(setq ang aann)
(if (null(eq_angle_pi ang aann))
(setq flag t)
)
)
)
)
(if (null flag)
(progn
(setq ptt (points_2_mrs p1 pt p2 ang sc))
(if (null p3)
(setq p3 ptt)
)
(if (null(and
(equal p3 ptt 1e-7)
(equal p3 (points_2_mrs p1a pt p2a ang sc) 1e-7)
))
(setq flag t)
(setq ret (list p3 ang sc))
))
)
)
((or (= nm "LWPOLYLINE")(= nm "POLYLINE"))
(setq p1s(GETPTS ent)p2s(GETPTS ent2))
(setq len (length p1s))
(if (= len (length p2s))
(progn
(while (> len 0)
(setq len (1- len))
(if (null(equal p3 (points_2_mrs (nth len p1s) pt (nth len p2s) ang sc) 1e-7))
(setq flag t len 0)
)
)
(if (null flag)
(setq ret (list p3 ang sc))
)
)
)
)
((= nm "ARC")
(if (equal (- (cdr (assoc 50 ent))(cdr (assoc 51 ent)))(- (cdr (assoc 50 ent2))(cdr (assoc 51 ent2))) 1e-7)
(progn
(setq sscc (/ (cdr (assoc 40 ent2))(cdr (assoc 40 ent))))
(setq r1 (cdr (assoc 40 ent)) r2 (cdr (assoc 40 ent2)))
(setq aann (- (cdr (assoc 50 ent2))(cdr (assoc 50 ent))))
(if (> aann (* 2.0 pi))
(setq aann (- aann (* 2.0 pi)))
)
(if (< aann (* -1.0 pi))
(setq aann (+ aann (* 2.0 pi)))
)
(if (null ang)
(setq ang aann)
(if (null(eq_angle ang aann))
(setq flag t)
)
)
(if (null flag)
(progn
(if (null sc)
(setq sc sscc)
(if (null(equal sc sscc 1e-7))
(setq flag t)
)
)
)
)
(if (null flag)
(progn
(setq a1 (cdr (assoc 50 ent))a2(cdr (assoc 50 ent2)))
(setq p1a (list (+(car p1) (* r1 (cos a1))) (+(cadr p1) (* r1 (sin a1)))))
(setq p2a (list (+(car p2) (* r2 (cos a2))) (+(cadr p2) (* r2 (sin a2)))))
(setq ptt (triangle_2_mrs p1 p1a pt p2 p2a))
(if (null p3)
(setq p3 ptt)
(if (or(null(equal p3 ptt 1e-7))(null(equal (- a2 a1)ang 1e-7)))
(setq flag t)
)
)
(if (null flag)
(setq ret (list p3 ang sc))
)
)
)
)
)
)
(if (= nm "INSERT")
(if (and(= (cdr (assoc 2 ent))(cdr (assoc 2 ent2)))
(equal (/ (cdr (assoc 42 ent))(cdr (assoc 41 ent)))(/ (cdr (assoc 42 ent2))(cdr (assoc 41 ent2)))1e-7))
(progn
(setq a1 (cdr (assoc 50 ent))a2(cdr (assoc 50 ent2)))
(setq sscc (/ (cdr (assoc 41 ent2))(cdr (assoc 41 ent))))
(if (null sc)
(setq sc sscc)
(if (null(equal sc sscc 1e-7))
(setq flag t)
)
)
(setq aann (- a2 a1))
(if (> aann (* 2.0 pi))
(setq aann (- aann (* 2.0 pi)))
)
(if (< aann (* -1.0 pi))
(setq aann (+ aann (* 2.0 pi)))
)
(if (null ang)
(setq ang aann)
(if (null(eq_angle ang aann))
(setq flag t)
)
)
(setq ptt (points_2_mrs p1 pt p2 ang sc))
(if (null p3)
(setq p3 ptt)
(if (null(equal p3 ptt 1e-7))
(setq flag t)
)
)
(if (null flag)
(setq ret (list p3 ang sc))
)
)
)
)
(t
(if(and
(equal p3 (points_2_mrs p1 pt p2 ang sc) 1e-7)
(eq_dxf ent ent2))
(setq ret (list p3 ang sc))
)
)
)
)
ret
);;其它图元有待增加完善
jltx123456
发表于 2016-1-6 16:58:22
jack093 发表于 2016-1-6 15:26 static/image/common/back.gif
支持图元增加
(defun find_eq_ent(ent ent2 pt p3 ang sc /flag ret nm p1 p2 p1a p2a aann sscc ptt...
楼主,很好的主题, 但是看到每层都放一点代码,这样会不易阅读 ,建议整理成一个完整的贴出来,或者直接上传lisp附件!
alexmai
发表于 2019-4-18 10:37:03
想不到还可以,破镜重圆,点赞
开心68602
发表于 2020-9-27 02:38:05
老师:加载一楼的插件,使用时提示no function definition: SS_ADD-DEL,怎么解决?
845245015
发表于 2020-9-27 08:25:12
关注,以备日后学习