乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 61|回复: 3

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

[复制链接]

3

主题

6

帖子

1

银币

初来乍到

Rank: 1

铜币
18
发表于 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. ;;====================================================================
回复

使用道具 举报

3

主题

6

帖子

1

银币

初来乍到

Rank: 1

铜币
18
发表于 2003-12-17 23:09:00 | 显示全部楼层
为什么没有人指教呢?
回复

使用道具 举报

3

主题

6

帖子

1

银币

初来乍到

Rank: 1

铜币
18
发表于 2003-12-21 21:17:00 | 显示全部楼层
版主。。帮忙看看嘛
回复

使用道具 举报

26

主题

3072

帖子

10

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3177
发表于 2003-12-21 21:27:00 | 显示全部楼层
delp函数有问题,这个函数好象是我写的,是有问题的,龙版主已经指出了,你应该看看对于某个问题的每个回帖,可能就会有一些改正或完善的地方。。。
说明,这个函数在vl-remove是,如果40 41 42 如果有相同的都会被删掉,导致错误。。。
另指正一下概念:ents是ent的定义数据,不是扩展数据,扩展数据是另外一个东西。。。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-7 16:04 , Processed in 0.602279 second(s), 60 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表