找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 568|回复: 4

[求助] [求助]:我的车削程序,如果参数类型错误如何修改?请各位高手帮忙调试下面的代码!

[复制链接]
发表于 2005-4-15 13:01:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
;;;;;;;;;;;;;;;直线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程序(最后一段实体为圆弧的情况下)
)
)  
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-4-15 13:09:47 | 显示全部楼层
;;;;;;圆弧G序 ;;;;;;;这段括号不匹配。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-4-15 13:28:14 | 显示全部楼层
太多太长...
看了头晕...呵呵..
宁可自己写来得清楚写..
不过我看了楼主的程序还是
比较欣赏楼主的好习惯,每句批注都很清楚
这样对程序的维护是很有好处的...
值得学习.....
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-4-15 13:38:39 | 显示全部楼层
楼主的习惯不错,不过有一点,注释的格式不太正规,不要用;;;;;,应该用;或是;_就行了,在VLISP编译器中,一格式化就全多看花
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-1-18 14:40:05 | 显示全部楼层
我想请问下,对于多义线,我不想打断(EXPLODE),请问要如何才能生成代码呢,块呢?????
急等回答
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-29 01:20 , Processed in 0.357612 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表