- 积分
- 4721
- 明经币
- 个
- 注册时间
- 2007-10-19
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
发表于 2011-12-22 19:31:58
|
显示全部楼层
; ###############################我自己开发的连接线段命令j#################################################
(defun c:j (/ s1 s2 s3 e1 e2 tmq1 tmq2 oldrad pt00 pt01 pt02 pt03 pt10 pt11 pt12 pt13 ang0 ang2 ang3 tag) ;主程序,连接线段
(setvar "cmdecho" 0)
(setq oldrad (getvar "filletrad"))
(setvar "filletrad" 0)
(setq s1 (ffg-entsel "\n请选择第一根线(*line,arc,ellipse,ray)<退出>: " '((0 . "RAY,ARC,*LINE,ELLIPSE"))))
(if (/= s1 nil)
(progn
(setq e1 (car s1)
tmq1 (ffg-getdxf e1 0)
);_结束setq
(redraw e1 3)
(setq s2 (ffg-entsel "\n请选择第二根线(*line,arc,ellipse,ray)<退出>: " '((0 . "RAY,ARC,*LINE,ELLIPSE"))))
(if (/= s2 nil)
(progn
(setq e2 (car s2)
tmq2 (ffg-getdxf e2 0)
);_结束setq
(setq tag t);设置标记
(if (and
(= "LINE" tmq1)
(= "LINE" tmq2)
);_结束and
(progn
(setq pt00 (ffg-getdxf e1 10)
pt01 (ffg-getdxf e1 11)
pt10 (ffg-getdxf e2 10)
pt11 (ffg-getdxf e2 11)
ang0 (angle pt00 pt01)
ang1 (angle pt10 pt11)
ang2 (angle pt00 pt10)
);_结束setq
(if (and ;;判断两直线是否平行
(or
(equal ang0 ang1 1e-6)
(equal ang0 (+ ang1 pi) 1e-6)
(equal ang0 (- ang1 pi) 1e-6)
) ;;进而判断是否共线
(or
(equal ang0 ang2 1e-6)
(equal ang0 (+ ang2 pi) 1e-6)
(equal ang0 (- ang2 pi) 1e-6)
);_结束or
);_结束and
(progn
(command ".join" s1 s2 "")
(setq tag nil)
);_结束progn
);_结束if
);_结束progn
);_结束if
(if (and
(= "ARC" tmq1)
(= "ARC" tmq2)
);_结束and
(progn
(setq pt01 (ffg-getdxf e1 10)
pt02 (ffg-getdxf e1 40)
pt11 (ffg-getdxf e2 10)
pt12 (ffg-getdxf e2 40)
);_结束setq
(if (and ;;判断两弧形半径与中心点是否相等
(equal pt01 pt11 1e-6)
(equal pt02 pt12 1e-6)
);_结束and
(progn
(command ".join" s1 s2 "")
(setq tag nil)
);_结束progn
);_结束if
);_结束progn
);_结束if
(if (and
(= "ELLIPSE" tmq1)
(= "ELLIPSE" tmq2)
);_结束and
(progn
(setq pt01 (ffg-getdxf e1 10)
pt02 (ffg-getdxf e1 11)
pt03 (ffg-getdxf e1 40)
pt11 (ffg-getdxf e2 10)
pt12 (ffg-getdxf e2 11)
pt13 (ffg-getdxf e2 40)
);_结束setq
(if (and ;;判断两弧形半径与中心点是否相等
(equal pt01 pt11 1e-6)
(equal pt02 pt12 1e-6)
(equal pt03 pt13 1e-6)
);_结束and
(progn
(command ".join" s1 s2 "")
(setq tag nil)
);_结束progn
);_结束if
);_结束progn
);_结束if
(if tag
(progn
(if (and
(or
(= "LINE" tmq1)
(= "ARC" tmq1)
(= "RAY" tmq1)
(= "XLINE" tmq1)
(= "ELLIPSE" tmq1)
);_结束or
(or
(= "LINE" tmq2)
(= "ARC" tmq2)
(= "RAY" tmq2)
(= "XLINE" tmq2)
(= "ELLIPSE" tmq2)
);_结束or
);_结束and
(progn
(command ".fillet" s1 s2)
);_结束progn
(progn
(command ".extend" s1 "" s2 "")
(command ".extend" s2 "" s1 "")
(setq s3 (entsel "\n请选择要删除的部分<退出>:"))
(command ".trim" s1 s2 "" s3)
);_结束progn
);_结束if
);_结束progn
);_结束if
);_结束progn
(princ "未选择到物体")
);_结束if
(redraw e1 4)
);_结束progn
(princ "未选择到物体")
);_结束if
(setvar "filletrad" oldrad)
(setvar "cmdecho" 1)
(princ)
);_ 结束defun
|
评分
-
查看全部评分
|