明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1720|回复: 3

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

[复制链接]
发表于 2003-12-17 19:18:00 | 显示全部楼层 |阅读模式
大家一起来除错,大家一起来优化
  1. ;;这是一个关于删除pline线中多余点的小小程序,但是总运行出错,请大侠们see……see……
  2. ;;====================================================================
  3. ;;删除顶点
  4. (defun delp (ent pt)                ;ent为选择的线 ents为扩展数据 pt为要删除的点
  5.   (princ "要删除一个点")
  6.   (setq ents (entget ent))
  7.   (setq lst (member (cons 10 pt) ents))
  8.   (if lst
  9.     (progn
  10.       (setq lst        (list (assoc 10 lst)
  11.                       (assoc 40 lst)
  12.                       (assoc 41 lst)
  13.                       (assoc 42 lst)
  14.                 )
  15.       )
  16.       (setq i 0)
  17.       (repeat 4
  18.         (setq ents (vl-remove (nth i lst) ents))
  19.         (setq i (1+ i))
  20.       )
  21.     )
  22.   )
  23.   (entmod ents)
  24.   (princ "删除一个点")
  25.   (princ)
  26. )

  27. ;;====================================================================
  28. ;;优化pline线
  29. (defun C:N7 ()
  30.   (vl-load-com)
  31.   (setq ss1 (ssget '((0 . "*polyline"))))
  32.   (setq        nn1 (sslength ss1)                ;赋值ii1=0,nn1是子集ss1的数目
  33.         ii1 0
  34.   )
  35.   ;;ss1为选择集、ss2为图元、ss3为ename的图元(扩展数据)、ss4为第ii3个扩展数据
  36.   (while (< ii1 nn1)
  37.     (setq ss2 (ssname ss1 ii1))                ;对第ii1个图元进行分析
  38.     (setq ss3 (entget ss2))
  39.     (setq nn3 (length ss3)
  40.           ii3 0
  41.           pt1 nil
  42.           pt2 nil
  43.           pt3 nil
  44.           ptf nil                        ;第一点以备后用
  45.           pts nil                        ;第二点以备后用
  46.     )
  47.     (while (< ii3 nn3)                        ;顺序读取各个扩展信息
  48.       (setq ss4 (nth ii3 ss3))                ;第ii3个扩展信息表放入ss4中
  49.       ;;读取为10的扩展信息,即坐标信息
  50.       (if (= (car ss4) 10)
  51.         (progn
  52.           (setq ss4 (cdr ss4))
  53.           (setq pt1 pt2)
  54.           (setq pt2 pt3)
  55.           (setq pt3 ss4)

  56.           (if (= pts nil)
  57.             (if        (= ptf nil)
  58.               (setq ptf ss4)
  59.               (setq pts ss4)
  60.             )
  61.             ;;看pt2是否是多余的点
  62.             (if        (equal (+ (distance pt2 pt1) (distance pt2 pt3))
  63.                        (distance pt1 pt3)
  64.                        0.000001
  65.                 )
  66.               (progn
  67.                 (princ "ok")
  68.                 (delp (ss2 pt2))
  69.               )
  70.             )
  71.           )
  72.         )
  73.       )
  74.       (setq ii3 (+ ii3 1))
  75.     )
  76.     (setq ii1 (+ ii1 1))
  77.   )
  78.   (princ "PLine线优化完毕!")
  79.   (princ)
  80. )

  81. ;;====================================================================
 楼主| 发表于 2003-12-17 23:09:00 | 显示全部楼层
为什么没有人指教呢?
 楼主| 发表于 2003-12-21 21:17:00 | 显示全部楼层
版主。。帮忙看看嘛
发表于 2003-12-21 21:27:00 | 显示全部楼层
delp函数有问题,这个函数好象是我写的,是有问题的,龙版主已经指出了,你应该看看对于某个问题的每个回帖,可能就会有一些改正或完善的地方。。。

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

另指正一下概念:ents是ent的定义数据,不是扩展数据,扩展数据是另外一个东西。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-27 10:22 , Processed in 0.172621 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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