- UID
- 236456
- 积分
- 0
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2005-4-2
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
;;;;;;;;;;;;;;;直线G程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun G:line () ;;;;;;如果为直线执行以下程序
(setq stx (cadr (assoc 10 ent1))) ;;;;;;获取直线起始点的x坐标值
(setq sty (caddr (assoc 10 ent1))) ;;;;;;获取直线起始点的y坐标值
(setq epx (cadr (assoc 11 ent1))) ;;;;;;获取直线终点的x坐标值
(setq epy (caddr (assoc 11 ent1))) ;;;;;;获取直线终点的y坐标值
(setq rex (- epx stx)) ;;;;;;以起始点为0点得出直线在x轴上的投影值
(setq rey (- epy sty)) ;;;;;;以起始点为0点得出直线在y轴上的投影值
(setq x (fix (* (abs rex) 1000))) ;;;;;;得出直线在x方向上的G加工数值,并置为x
(setq y (fix (* (abs rey) 1000))) ;;;;;;得出直线在y方向上的G加工数值,并置为y
(write-line (strcat "G01" "x" (rtos x) "y" (rtos y) ) f ) ;;;;;;;直线的G代码输出
(setq eplx epx) ;;;;;;;把直线的终点x坐标值保存为变量stlx
(setq eply epy) ;;;;;;;把直线的终点y坐标值保存为变量stly
) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;圆弧G序 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun G:arc ()
(setq cex (cadr (assoc 10 ent1))) ;;;;;;;;;获取圆弧的圆心x坐标
(setq cey (caddr (assoc 10 ent1))) ;;;;;;;;;获取圆弧的圆心y坐标
(setq rad (cdr (assoc 40 ent1))) ;;;;;;;;;获取圆弧的半径
(setq spa (cdr (assoc 50 ent1))) ;;;;;;;;;获取圆弧起始点的角度
(setq epa (cdr (assoc 51 ent1))) ;;;;;;;;;获取圆弧终点的角度
(setq spx (* rad (cos spa))) ;;;;;;;;;获取圆弧起点相对于圆心的x坐标
(setq spy (* rad (sin spa))) ;;;;;;;;;获取圆弧起点相对于圆心的y坐标
(setq epx (* rad (cos epa))) ;;;;;;;;;获取圆弧终点相对于圆心的x坐标
(setq epy (* rad (sin epa))) ;;;;;;;;;获取圆弧终点相对于圆心的y坐标
(setq jspx (+ spx cex)) ;;;;;;;;;获取圆弧起点在世界坐标系下的x坐标
(setq jspy (+ spy cey)) ;;;;;;;;;获取圆弧起点在世界坐标系下的y坐标
(setq jepx (+ epx cex)) ;;;;;;;;;获取圆弧终点在世界坐标系下的x坐标
(setq jepy (+ epy cey)) ;;;;;;;;;获取圆弧终点在世界坐标系下的y坐标
(if (<= (abs epx) (abs epy)) ;;;;;;;;;(逆弧时)判断是取Gx还是取Gy
(setq G "Gx") ;;;;;;;;;在阴影的范围内,G取Gx
(setq G "Gy") ;;;;;;;;;在阴影的范围外,G取Gy
)
(setq x (fix (* (abs spx) 1000))) ;;;;;;;;;(逆弧时)圆弧G代码中的x的值
(setq y (fix (* (abs spy) 1000))) ;;;;;;;;;圆弧G代码中的y的值
)
(progn
(cond
((and (< 0 epx) (<= 0 epy)) (setq z "SR1")) ;;;;;;;;;起始点在第一相限,z取SR1
((and (<= epx 0) (< 0 epy)) (setq z "SR2")) ;;;;;;;;;起始点在第二相限,z取SR2
((and (< epx 0) (<= epy 0)) (setq z "SR3")) ;;;;;;;;;起始点在第三相限,z取SR3
((and (<= 0 epx) (< epy 0)) (setq z "SR4")) ;;;;;;;;;起始点在第四相限,z取SR4
)
(if (<= (abs spx) (abs spy)) ;;;;;;;;;(顺弧时)判断是去Gx还是取Gy
(setq G "Gx") ;;;;;;;;;在阴影的范围内,G取Gx
(setq G "Gy") ;;;;;;;;;在阴影的范围外,G取Gy
)
(setq x (fix (* (abs epx) 1000))) ;;;;;;;;;(顺弧时)圆弧G代码中x的值
(setq y (fix (* (abs epy) 1000))) ;;;;;;;;;圆弧G代码中y的值
)
)
(cond
((and (<= 0 spx) (<= 0 spy)) (setq nums 1)) ;;;;;;;;;起始点在第一相限,置nums为1
((and (>= 0 spx) (<= 0 spy)) (setq nums 2)) ;;;;;;;;;起始点在第二相限,置nums为2
((and (>= 0 spx) (>= 0 spy)) (setq nums 3)) ;;;;;;;;;起始点在第三相限,置nums为3
((and (<= 0 spx) (>= 0 spy)) (setq nums 4)) ;;;;;;;;;起始点在第四相限,置nums为4
)
(cond
((and (<= 0 epx) (<= 0 epy)) (setq nume 1)) ;;;;;;;;;终点在第一相限,置nume为1
((and (>= 0 epx) (<= 0 epy)) (setq nume 2)) ;;;;;;;;;终点在第二相限,置nume为2
((and (>= 0 epx) (>= 0 epy)) (setq nume 3)) ;;;;;;;;;终点在第三相限,置nume为3
((and (<= 0 epx) (>= 0 epy)) (setq nume 4)) ;;;;;;;;;终点在第四相限,置nume为4
)
(if (= G "Gx") ;;;;;;;;;;;;判断G是否去Gx
(progn ;;;;;;;;;G取Gx执行以下程序
(if (= nums 1) ;;;;;;如果nums等于1
(progn
(cond
((= nume 1) (setq J (- (abs spx) (abs epx)))) ;;;;;如果nume等于1,计算J的值
((= nume 2) (setq J (+ (abs spx) (abs epx)))) ;;;;;如果nume等于2,计算J的值
((= nume 3) (setq J (+ (abs spx) (+ rad (- rad (abs epx)))))) ;;;;;如果nume等于3,计算J的值
((= nume 4) (setq J (+ (* rad 2) (+ (abs spx) (abs epx))))) ;;;;;如果nume等于4,计算J的值
((and (< spx epx) (> spy epy)) (setq J (+ (abs spx) (+ (* rad 3) (- rad (abs epx)))))) ;;;;;;;第五种情况
)
)
(progn
(if (= nums 2) ;;;;;;如果nums等于2
(progn
(cond
((= nume 2) (setq J (- (abs epx) (abs stx)))) ;;;;;;如果nume等于2,计算J的值
((= nume 3) (setq J (+ (- rad (abs spx)) (- rad (abs epx))))) ;;;;;;如果nume等于3,计算J的值
((= nume 4) (setq J (+ rad (+ (abs epx) (- rad (abs spx)))))) ;;;;;;如果nume等于4,计算J的值
((= nume 1) (setq J (+ (* rad 2) (+ (- rad (abs spx)) (- rad (abs epx)))))) ;;;;;;如果nume等于1,计算J的值
((and (< spx epx) (< spy epy)) (setq J (+ (* rad 3) (+ (- rad (abs spx)) (abs epx))))) ;;;;;第五种情况,计算J的值
)
)
(progn
(if (= nums 3) ;;;;;;如果nums等于3
(progn
(cond
((= nume 3) (setq J (- (abs spx) (abs epx)))) ;;;;;;如果nume等于3,计算J的值
((= nume 4) (setq J (+ (abs spx) (abs epx)))) ;;;;;;如果nume等于4,计算J的值
((= nume 1) (setq J (+ (abs spx) (+ rad (- rad (abs epx)))))) ;;;;;;如果nume等于1,计算J的值
((= nume 2) (setq J (+ (* rad 2) (+ (abs spx) (abs epx))))) ;;;;;;如果nume等于2,计算J的值
((and (> spx epx) (< spy epy)) (setq J (+ (abs spx) (+ (* rad 3) (- rad (abs epx)))))) ;;;;;第五种情况,计算J的值
)
)
(progn ;;;;;;最后一种情况,nums等于4
(cond
((= nume 4) (setq J (- (abs epx) (abs spx)))) ;;;;;;如果nume等于4,计算J的值
((= nume 1) (setq J (+ (- rad (abs spx)) (- rad (abs epx))))) ;;;;;;如果nume等于1,计算J的值
((= nume 2) (setq J (+ rad (+ (abs epx) (- rad (abs spx)))))) ;;;;;;如果nume等于2,计算J的值
((= nume 3) (setq J (+ (* rad 2) (+ (- rad (abs spx)) (- rad (abs epx)))))) ;;;;;;如果nume等于3,计算J的值
((and (> spx epx) (> spy epy)) (setq J (+ (* rad 3) (+ (- rad (abs spx)) (abs epx))))) ;;;;;第五种情况,计算J的值
)
)
)
)
)
)
)
)
(progn ;;;;;;;;;;;;;;;G取Gy执行以下程序
(if (= nums 1) ;;;;;;如果nums等于1
(progn
(cond
((= nume 1) (setq J (- (abs epy) (abs spy)))) ;;;;;;如果nume等于1,计算J的值
((= nume 2) (setq J (+ (- rad (abs spy)) (- rad (abs epy))))) ;;;;;;如果nume等于2,计算J的值
((= nume 3) (setq J (+ rad (+ (- rad (abs spy)) (abs epy))))) ;;;;;;如果nume等于3,计算J的值
((= nume 4) (setq J (+ (- rad (abs spy)) (+ (* rad 2) (- rad (abs epy)))))) ;;;;;;如果nume等于4,计算J的值
( (and (< spx epx) (> spy epy)) (setq J (+ (abs epy) (+ (* rad 3) (- rad (abs spy)))))) ;;;;;第五种情况,计算J的值
)
)
(progn
(if (= nums 2) ;;;;;如果nums等于2
(progn
(cond
((= nume 2) (setq J (- (abs spy) (abs epy)))) ;;;;;;如果nume等于2,计算J的值
((= nume 3) (setq J (+ (abs spy) (abs epy)))) ;;;;;;如果nume等于3,计算J的值
((= nume 4) (setq J (+ (abs spy) (+ rad (- rad (abs epy)))))) ;;;;;;如果nume等于4,计算J的值
((= nume 1) (setq J (+ (abs spy) (+ (abs epy) (* rad 2))))) ;;;;;;如果nume等于1,计算J的值
((and (< spx epx) (< spy epy)) (setq J (+ (abs spy) (+ (- rad (abs epy)) (* rad 3))))) ;;;;;第五种情况,计算J的值
)
)
(progn
(if (= nums 3) ;;;;;;如果nums等于3
(progn
(cond
((= nume 3) (setq J (- (abs epy) (abs spy)))) ;;;;;;如果nume等于3,计算J的值
((= nume 4) (setq J (+ (- rad (abs spy)) (- rad (abs epy))))) ;;;;;;如果nume等于4,计算J的值
((= nume 1) (setq J (+ rad (+ (- rad (abs spy)) (abs epy))))) ;;;;;;如果nume等于1,计算J的值
((= nume 2) (setq J (+ (- rad (abs spy)) (+ (* rad 2) (- rad (abs epy)))))) ;;;;;;如果nume等于2,计算J的值
((and (> spx epx) (< spy epy)) (setq J (+ (abs epy) (+ (* rad 3) (- rad (abs spy)))))) ;;;;;第五种情况,计算J的值
)
)
(progn ;;;;;;最后一种情况,nums等于4
(cond
((= nume 4) (setq J (- (abs spy) (abs epy)))) ;;;;;;如果nume等于4,计算J的值
((= nume 1) (setq J (+ (abs spy) (abs epy)))) ;;;;;;如果nume等于1,计算J的值
((= nume 2) (setq J (+ (abs spy) (+ rad (- rad (abs epy)))))) ;;;;;;如果nume等于2,计算J的值
((= nume 3) (setq J (+ (abs spy) (+ (abs epy) (* rad 2))))) ;;;;;;如果nume等于3,计算J的值
((and (> spx epx) (> spy epy)) (setq J (+ (abs spy) (+ (- rad (abs epy)) (* rad 3))))) ;;;;;第五种情况,计算J的值
)
)
)
)
)
)
)
)
)
(setq o (abs (fix(* J 1000)))) ;;;;;;;;;;;J的值乘以1000并取其整数绝对值
(write-line (strcat "G03" "x" (rtos x) "y" (rtos y) "r" (rtos rad)) f ) ;;;;;;;;;输出G代码
(setq eplx jepx) ;;;;;;;;;把圆弧的终点x坐标保存为变量eplx
(setq eply jepy) ;;;;;;;;;把圆弧的终点y坐标保存为变量eply
(setq splx jspx) ;;;;;;;;;把圆弧的始点x坐标保存为变量splx
(setq sply jspy) ;;;;;;;;;把圆弧的始点y坐标保存为变量sply
);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;对实体进行多义线编辑及进行偏置进一步优化实体的序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun G:detail ()
(princ "\nselect entities to pedit:") ;;;;;;;提示选择实体进行多义线编辑
(setq ssg (ssget)) ;;;;;;;选择实体
(setq ent0 (entget (setq entn0 (ssname ssg 0)))) ;;;;;;获得所选第一个实体的信息,并设为ent0
(setq ss0 (cdr (assoc '0 ent0))) ;;;;;;获取第一个实体ent0,0组值
(if (or (= ss0 "LINE") (= ss0 "ARC" )) ;;;;;;;判断实体ent0的0组码值是否为“Line”
(command "pedit" pause "Y" "J" (ssget) "" "");;;;;;;是“LINE"生成多义线
(command "pedit" pause "") ;;;;;;;不是“LINE",执行此序
) ;;;;;;;判断结束
(princ "\nselect pline for offset:") ;;;;;;;提示选择实体进行偏置
(command "offset" pz pause pause "") ;;;;;;;根据放电间隙值偏置
(princ "\nselect origin entity to delete:") ;;;;;;;提示选择原来的实体进行删除
(command "erase" pause "" ) ;;;;;;;删除原来的体
(princ "\nselect entity for explode:") ;;;;;;;提示输入实体进行炸开
(command "explode" pause "") ;;;;;;;选择实体并炸开
);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;引入线G程序(第一段实体为直线的情况下);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun G:ipline () ;;;;;;如果为直线执行以下程序
(setq ipx (car ip)) ;;;;;;获取引入点的x坐标值
(setq ipy (cadr ip)) ;;;;;;获取引入点的y坐标值
(setq stx (cadr (assoc 10 ent1))) ;;;;;;获取直线终点的x坐标值
(setq sty (caddr (assoc 10 ent1))) ;;;;;;获取直线终点的y坐值
(setq rex (- stx ipx)) ;;;;;;以起始点为0点得出直线在x轴上的投影值
(setq rey (- sty ipy)) ;;;;;;以起始点为0点得出直线在y轴上的投影值
(setq x (fix (* (abs rex) 1000))) ;;;;;;得出直线在x方向上的G加工数值,并置为x
(setq y (fix (* (abs rey) 1000))) ;;;;;;得出直线在y方向上的G加工数值,并置为y
(write-line (strcat "G01" "x" (rtos x) "y" (rtos y) ) f ) ;;;;;;;引入线的G代码输出
(setq stp (list stx sty)) ;;;;;;;;为stx,sty建立一个点对
(command "line" ip stp "") ;;;;;;;;绘制一条引出线
);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;引入线G程序(第一段实体为圆弧的情况下);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun G:iparc () ;;;;;;如果为圆弧执行以下程序
(setq ipx (car ip)) ;;;;;;获取引入点的x坐标值
(setq ipy (cadr ip)) ;;;;;;获取引入点的y坐标值
(setq cex (cadr (assoc 10 ent1))) ;;;;;;;;;获取圆弧的圆心x坐标
(setq cey (caddr (assoc 10 ent1))) ;;;;;;;;;获取圆弧的圆心y坐标
(setq rad (cdr (assoc 40 ent1))) ;;;;;;;;;获取圆弧的半径
(setq spa (cdr (assoc 50 ent1))) ;;;;;;;;;获取圆弧起始点的角度
(setq spx (* rad (cos spa))) ;;;;;;;;;获取圆弧起点相对于圆心的x坐标
(setq spy (* rad (sin spa))) ;;;;;;;;;获取圆弧起点相对于圆心的y坐标
(setq jspx (+ (* rad (cos spa)) cex)) ;;;;;;;;;获取圆弧起点在世界坐标系下的x坐标
(setq jspy (+ (* rad (sin spa)) cey)) ;;;;;;;;;获取圆弧起点在世界坐标系下的y坐标
(setq rex (- jspx ipx)) ;;;;;;以起始点为0点得出直线在x轴上的投影值
(setq rey (- jspy ipy)) ;;;;;;以起始点为0点得出直线在y轴上的投影值
(setq x (fix (* (abs rex) 1000))) ;;;;;;得出直线在x方向上的G加工数值,并置为x
(setq y (fix (* (abs rey) 1000))) ;;;;;;得出直线在y方向上的G加工数值,并置为y
(write-line (strcat "G01" "x" (rtos x) "y" (rtos y) "r" (rtos rad) ) f ) ;;;;;;;引入线的G代码输出
(setq stp (list jspx jspy)) ;;;;;;;;为jspx ,jspy建立一个点对
(command "line" ip stp "") ;;;;;;;;绘制一条引出线
);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;引出线G程序(第一段实体为直线的情况下);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun G:iplineo () ;;;;;;如果为直线执行以下程序
(setq ipx (car ip)) ;;;;;;获取引入点的x坐标值
(setq ipy (cadr ip)) ;;;;;;获取引入点的y坐标值
(setq epx (cadr (assoc 11 ent1))) ;;;;;;获取直线终点的x坐标值
(setq epy (caddr (assoc 11 ent1))) ;;;;;;获取直线终点的y坐值
(setq rex (- ipx epx)) ;;;;;;以起始点为0点得出直线在x轴上的投影值
(setq rey (- ipy epy)) ;;;;;;以起始点为0点得出直线在y轴上的投影值
(setq x (fix (* (abs rex) 1000))) ;;;;;;得出直线在x方向上的G加工数值,并置为x
(setq y (fix (* (abs rey) 1000))) ;;;;;;得出直线在y方向上的G加工数值,并置为y
(write-line (strcat "G01" "x" (rtos x) "y" (rtos y) ) f ) ;;;;;;;引入线的G代码输出
);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;引出线G程序(第一段实体为圆弧的情况下);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun G:iparco () ;;;;;;如果为圆弧执行以下程序
(setq ipx (car ip)) ;;;;;;获取引入点的x坐标值
(setq ipy (cadr ip)) ;;;;;;获取引入点的y坐标值
(setq cex (cadr (assoc 10 ent1))) ;;;;;;;;;获取圆弧的圆心x坐标
(setq cey (caddr (assoc 10 ent1))) ;;;;;;;;;获取圆弧的圆心y坐标
(setq rad (cdr (assoc 40 ent1))) ;;;;;;;;;获取圆弧的半径
(setq epa (cdr (assoc 51 ent1))) ;;;;;;;;;获取圆弧终点的角度
(setq epx (* rad (cos epa))) ;;;;;;;;;获取圆弧终点相对于圆心的x坐标
(setq epy (* rad (sin epa))) ;;;;;;;;;获取圆弧终点相对于圆心的y坐标
(setq jepx (+ (* rad (cos epa)) cex)) ;;;;;;;;;获取圆弧终点在世界坐标系下的x坐标
(setq jepy (+ (* rad (sin epa)) cey)) ;;;;;;;;;获取圆弧终点在世界坐标系下的y坐标
(setq rex (- ipx jepx)) ;;;;;;以起始点为0点得出直线在x轴上的投影值
(setq rey (- ipy jepy)) ;;;;;;以起始点为0点得出直线在y轴上的投影值
(setq x (fix (* (abs rex) 1000))) ;;;;;;得出直线在x方向上的G加工数值,并置为x
(setq y (fix (* (abs rey) 1000))) ;;;;;;得出直线在y方向上的G加工数值,并置为y
(write-line (strcat "G01" "x" (rtos x) "y" (rtos y) "r" (rtos rad) ) f ) ;;;;;;;引入线的G代码输出
);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;主程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun C:G ()
(setq pz (getreal "\ninput offset distance:"));;;;;;;输入放电间隙值
(setq ip (getpoint "\ninput import point:")) ;;;;;;;输入引点
(setq f (open "d:\\G.txt" "w")) ;;;;;;;创建并打开G程序文本
(G:detail) ;;;;;;;对创建的实体进行偏置并为选择实体生成G代码做准备
(setq sset (ssget)) ;;;;;;;获取实体
(setq ilast (sslength sset)) ;;;;;;;获得实体的个数
(setq ent1 (entget (setq entn (ssname sset 0)))) ;;;;;;获得第一个实体的信息
(setq ss (cdr (assoc '0 ent1))) ;;;;;;获取第一个实体0组码的值
(if(= ss "LINE") ;;;;;;判断第一个实体0的组码值是line还是arc
(progn
(G:ipline)
(G:line) ;;;;;;;;;;如果是直线执行直线G程序
)
(progn
(G:iparc)
(G:arc) ;;;;;;;;;;如果是圆弧执行圆弧G程序
)
)
(while (< 1 ilast) ;;;;;;;;;;开始循环体
(setq entn (entnext entn)) ;;;;;;;;;;获取下一个实体的名字
(setq ent1 (entget entn)) ;;;;;;;;;;获取下一个实体的信息
(setq ss (cdr (assoc '0 ent1))) ;;;;;;;;;;获取下一个实体组码为0的值,置为ss
(if (= ss "LINE") ;;;;;;;;;;判断组码值是line还是arc
(G:line) ;;;;;;;;;;是直线时执行直线G程序
(G:arc) ;;;;;;;;;;是逆圆弧时执行圆弧G序
)
(setq ilast (- ilast 1)) ;;;;;;;;;;实体数减1
)
(if (= ss "LINE")
(G:iplineo) ;;;;;;;;;;引出线G程序(最后一段实体为直线的情况下)
(G:iparco) ;;;;;;;;;;引出线G程序(最后一段实体为圆弧的情况下)
)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|