xiaowa 发表于 2003-12-17 19:18:00

大家一起来除错,大家一起来优化

大家一起来除错,大家一起来优化
;;这是一个关于删除pline线中多余点的小小程序,但是总运行出错,请大侠们see……see……
;;====================================================================
;;删除顶点
(defun delp (ent pt)                ;ent为选择的线 ents为扩展数据 pt为要删除的点
(princ "要删除一个点")
(setq ents (entget ent))
(setq lst (member (cons 10 pt) ents))
(if lst
    (progn
      (setq lst        (list (assoc 10 lst)
                      (assoc 40 lst)
                      (assoc 41 lst)
                      (assoc 42 lst)
                )
      )
      (setq i 0)
      (repeat 4
        (setq ents (vl-remove (nth i lst) ents))
        (setq i (1+ i))
      )
    )
)
(entmod ents)
(princ "删除一个点")
(princ)
)

;;====================================================================
;;优化pline线
(defun C:N7 ()
(vl-load-com)
(setq ss1 (ssget '((0 . "*polyline"))))
(setq        nn1 (sslength ss1)                ;赋值ii1=0,nn1是子集ss1的数目
        ii1 0
)
;;ss1为选择集、ss2为图元、ss3为ename的图元(扩展数据)、ss4为第ii3个扩展数据
(while (< ii1 nn1)
    (setq ss2 (ssname ss1 ii1))                ;对第ii1个图元进行分析
    (setq ss3 (entget ss2))
    (setq nn3 (length ss3)
          ii3 0
          pt1 nil
          pt2 nil
          pt3 nil
          ptf nil                        ;第一点以备后用
          pts nil                        ;第二点以备后用
    )
    (while (< ii3 nn3)                        ;顺序读取各个扩展信息
      (setq ss4 (nth ii3 ss3))                ;第ii3个扩展信息表放入ss4中
      ;;读取为10的扩展信息,即坐标信息
      (if (= (car ss4) 10)
        (progn
          (setq ss4 (cdr ss4))
          (setq pt1 pt2)
          (setq pt2 pt3)
          (setq pt3 ss4)

          (if (= pts nil)
          (if        (= ptf nil)
              (setq ptf ss4)
              (setq pts ss4)
          )
            ;;看pt2是否是多余的点
          (if        (equal (+ (distance pt2 pt1) (distance pt2 pt3))
                     (distance pt1 pt3)
                     0.000001
                )
              (progn
                (princ "ok")
                (delp (ss2 pt2))
              )
          )
          )
        )
      )
      (setq ii3 (+ ii3 1))
    )
    (setq ii1 (+ ii1 1))
)
(princ "PLine线优化完毕!")
(princ)
)

;;====================================================================

xiaowa 发表于 2003-12-17 23:09:00

为什么没有人指教呢?

xiaowa 发表于 2003-12-21 21:17:00

版主。。帮忙看看嘛

meflying 发表于 2003-12-21 21:27:00

delp函数有问题,这个函数好象是我写的,是有问题的,龙版主已经指出了,你应该看看对于某个问题的每个回帖,可能就会有一些改正或完善的地方。。。

说明,这个函数在vl-remove是,如果40 41 42 如果有相同的都会被删掉,导致错误。。。

另指正一下概念:ents是ent的定义数据,不是扩展数据,扩展数据是另外一个东西。。。
页: [1]
查看完整版本: 大家一起来除错,大家一起来优化