cz78873559 发表于 2012-7-1 20:14:33

谁能帮我找出这里面的错误!谢谢!

(defun c:jzxjc()
(setq val_jz_s 0.0000001)
(princ "\n检查界址线之间是否重合
   \n程序设置:界址线 layer= jzd\n")
(setq ss1 (ssget '((0 . "lwpolyline") (8 . "jzd"))))
(setq n1 0)
(while (setq name1 (ssname ss1 n1))
    (setq get1 (entget name1))
    (setq val_70 (cdr (assoc 70 get1)))
    (setq pl_coo_list (coord_lwpl get1))
    (setq pl_coo_list (coord_lwpl_c pl_coo_list val_70))
    (setq i 0)
    (setq sum_coo (length pl_coo_list))
    (while (< i (1- sum_coo))
      (setq p1 (nth i pl_coo_list))
      (setq p2 (nth (1+ i) pl_coo_list))
      ;;;判断L_p1-p2是否在同一条界址边上
      (setq val_jzd nil)
      (setq val_009 nil)
      (if (setq ss_jzd (ssget "c" p1 p2 '((0 . "lwpolyline") (8 . "j099"))))
(progn
   (setq n_jzd 0)
   (while (setq name_jzd (ssname ss_jzd n_jzd))
   (setq get_jzd (entget name_jzd))
   (setq val_70_jzd (cdr (assoc 70 get_jzd)))
   (setq jzd_list (coord_lwpl get_jzd))
   (setq jzd_list (coord_lwpl_c jzd_list val_70_jzd))
   (setq i_jzd 0)
   (setq sum_jzd (length jzd_list))
   (while (< i_jzd (1- sum_jzd))
       (setq jzd1 (nth i_jzd jzd_list))
       (setq jzd2 (nth (1+ i_jzd) jzd_list))
       (setq dist_jz (distance jzd1 jzd2))
       (setq dist_p1 (+ (distance jzd1 p1) (distance jzd2 p1)))
       (setq dist_p2 (+ (distance jzd1 p2) (distance jzd2 p2)))
       (setq d_s1 (abs (- dist_jz dist_p1)))
       (setq d_s2 (abs (- dist_jz dist_p2)))
       (if (and (< d_s1 val_jz_s) (< d_s2 val_jz_s))
(setq val_009 T val_jzd T i_jzd sum_jzd n_jzd (sslength ss_jzd))
       )
       (setq i_jzd (1+ i_jzd))
      
   ) ;;;while i_jzd
   (setq n_jzd (1+ n_jzd))
   ) ;;; while name_jzd
)
      );;; endif
      ;;;如果L_p1-p2不在同一条界址边上,判断是否有009的某一段线与L_p1-p2重合
      (if (not val_jzd)
(progn
   (setq ss_009 (ssget "c" p1 p2 '((0 . "lwpolyline") (8 . "jzd*"))))
   (ssdel name1 ss_009)
   (if ss_009
   (progn
       (setq n_009 0)
       (while (setq name_009 (ssname ss_009 n_009))
(setq get_009 (entget name_009))
(setq val_70_009 (cdr (assoc 70 get_009)))
(setq c009_list (coord_lwpl get_009))
(setq c009_list (coord_lwpl_c c009_list val_70_009))
(setq i_009 0)
(setq sum_009 (length c009_list))
(while (< i_009 (1- sum_009))
    (setq p009_1 (nth i_009 c009_list))
    (setq p009_2 (nth (1+ i_009) c009_list))
    (setq dist1_1 (distance p1 p009_1))
    (setq dist1_2 (distance p1 p009_2))
    (setq dist2_1 (distance p2 p009_1))
    (setq dist2_2 (distance p2 p009_2))
    (setq dist_min1 (min dist1_1 dist1_2))
    (setq dist_min2 (min dist2_1 dist2_2))
    (if (and (< dist_min1 val_jz_s) (< dist_min2 val_jz_s) )
      (setq i_009 sum_009 n_009 (sslength ss_009) val_009 T)
    )
    (setq i_009 (1+ i_009))
);;; while i_009
(setq n_009 (1+ n_009))
       ) ;;;while name_009
   )
   ) ;;;end if ss_009
)
      ) ;;;end if val_jzd
      (if (not val_009) ;;;如果L_p1-p2无重合,在err_reg画线
(progn
   (setq pp2 (list (/ (+ (nth 0 p1) (nth 0 p2)) 2.0) (/ (+ (nth 1 p1) (nth 1 p2)) 2.0)))
   (setq ang_p1p2 (angle p1 p2))
   (setq pp3 (polar pp2 (+ ang_p1p2 (/ PI 2)) 2))
   (command "layer" "m" "err_reg" "c" "3" "err_reg" "")
   (command "osnap" "off")
   (command "pline" pp2 "w" 0 2 pp3 "")
)
      ) ;;;end if (nto val_009)
      (setq i (1+ i))
    ) ;;; while i
    (setq n1 (1+ n1))
    (setq str_pljc (strcat "\n正在检查...... " (rtos (/ n1 (sslength ss1) 0.01) 2 2) "%"))
    (princ str_pljc)
   
);;;while name1
(princ "\nok 检查err_reg层中画线处\n")
(princ)
)

cz78873559 发表于 2012-7-1 20:15:45

我运行,选择后就出现   错误: 参数类型错误: lselsetp nil
页: [1]
查看完整版本: 谁能帮我找出这里面的错误!谢谢!