找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1221|回复: 7

[求助] [求助]:程序在执行(vl-cmdf "_.break" enta "_first" point &qu

[复制链接]
发表于 2005-12-5 12:47:28 | 显示全部楼层 |阅读模式

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

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

×

  1.   [FONT=courier new]
  2. (defun c:pl1000( / a panduan i enta lst point cmdecho_old)
  3.   (DEFUN GET_ENDS_PL (PL / n pt-lst)
  4.     (setq pl (entget PL))
  5.     (FOREACH N PL
  6.       (IF (= 10 (CAR N))
  7.         (SETQ PT-LST (APPEND PT-LST (LIST (CDR N))))
  8.       )
  9.     )
  10.     PT-LST
  11.   )

  12.   (setq cmdecho_old (getvar "cmdecho"))
  13.   (setvar "cmdecho" 0)
  14.   (vl-cmdf "_.undo" "_group")
  15.   (setq a (ssget "X" '((0 . "LWPOLYLINE") (-4 . ">") (90 . 1000))))
  16.   (if (/= a nil)
  17.     (progn
  18.       (princ (strcat "\n图中有" (itoa (sslength a)) "条顶点数超过1000的多义线!"))
  19.       (initget "Y N")
  20.       (setq panduan (getkword "\n是否在1000点处打断?<Y>/N"))
  21.       (if (= panduan nil)
  22.         (setq panduan "Y")
  23.       )
  24.       (setq i 0)
  25.       (while (and (= panduan "Y") (/= a nil))
  26.         (repeat (sslength a)
  27.           (setq enta (ssname a i))
  28.           (setq lst (GET_ENDS_PL enta))
  29.           (setq fpt (nth 999 lst))
  30.           (setq point (list (car fpt) (cadr fpt) 0.0))
  31.           (vl-cmdf "_.break" enta "_first" point "@")
  32.           (setq i (1+ i))
  33.         )
  34.         (setq a (ssget "X" '((0 . "LWPOLYLINE") (-4 . ">") (90 . 1000))))
  35.         (setq i 0)
  36.       )
  37.       (princ "\n图中所有顶点数超过1000的多义线均被打断了!")
  38.     )
  39.     (princ "\n图中没有顶点数超过1000的多义线!")
  40.   )
  41.   (vl-cmdf "_.undo" "_end")
  42.   (setvar "cmdecho" cmdecho_old)
  43.   (princ)
  44. )

  45.   [/FONT]


程序的目的是将顶点数超过1000的多义线,在顶点1000处打断,可是在执行
(vl-cmdf "_.break" enta "_first" point "@")
这句的时候出现无效点的提示,但能打断,请高手帮我论断一下,看看问题出在什么地方了,谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-12-5 14:16:44 | 显示全部楼层
  1. [FONT=courier new](defun c:pl1000        (/ a panduan i enta lst point cmdecho_old os)
  2.   (DEFUN GET_ENDS_PL (PL / n pt-lst)
  3.     (setq pl (entget PL))
  4.     (FOREACH N PL
  5.       (IF (= 10 (CAR N))
  6.         (SETQ PT-LST (APPEND PT-LST (LIST (CDR N))))
  7.       )
  8.     )
  9.     PT-LST
  10.   )
  11.   (setq cmdecho_old (getvar "cmdecho")
  12.         os (getvar "osmode"))
  13.   (setvar "cmdecho" 0)
  14.   (setvar "osmode" 0);;;存在问题
  15.   (vl-cmdf "_.undo" "BE")
  16.   (if (setq a (ssget "X" '((0 . "LWPOLYLINE") (-4 . ">") (90 . 1000))))
  17.     (progn
  18.       (princ (strcat "\n图中有"
  19.                      (itoa (sslength a))
  20.                      "条顶点数超过1000的多义线!"
  21.              )
  22.       )
  23.       (initget "Y N")
  24.       (setq panduan (getkword "\n是否在1000点处打断?/N"))
  25.       (if (= panduan nil)
  26.         (setq panduan "Y")
  27.       )
  28.       (setq i 0)
  29.       (while (and (= panduan "Y") (/= a nil))
  30.         (repeat        (sslength a)
  31.           (setq enta (ssname a i))
  32.           (setq lst (GET_ENDS_PL enta))
  33.           (setq fpt (nth 999 lst))
  34.           (setq point (list (car fpt) (cadr fpt) 0.0))
  35.           (vl-cmdf "_.break" (list enta point) "_first" point point);;;存在问题
  36.           (setq i (1+ i))
  37.         )
  38.         (setq a (ssget "X" '((0 . "LWPOLYLINE") (-4 . ">") (90 . 1000))))
  39.         (setq i 0)
  40.       )
  41.       (princ "\n图中所有顶点数超过1000的多义线均被打断了!")
  42.     )
  43.     (princ "\n图中没有顶点数超过1000的多义线!")
  44.   )
  45.   (vl-cmdf "_.undo" "_end")
  46.   (setvar "cmdecho" cmdecho_old)
  47.   (setvar "osmode"os)
  48.   (princ)
  49. )[/FONT]

另:
取顶点的函数不好,不支持“POLYLINE”类实体,即(setvar"PLINETYPE"0)。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8157个

财富等级: 富甲天下

发表于 2005-12-5 14:43:56 | 显示全部楼层
(vl-cmdf "_.break" enta "_first" point "@")
===>
(vl-cmdf "_.break" enta  point point)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-5 16:04:56 | 显示全部楼层
现在还有一个问题,就是找点的速度太慢,当多义线的顶点数超过20000时,程序要执行很长的时间。有什么办法可以提高找点的速度???
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8157个

财富等级: 富甲天下

发表于 2005-12-5 16:48:22 | 显示全部楼层
;; (defun get_ends_pl (pl / n pt-lst)
;;     (setq pl (entget pl))
;;     (foreach n pl
;;       (if (= 10 (car n))
;;         (setq pt-lst (append pt-lst (list (cdr n))))
;;       )
;;     )
;;     pt-lst
;; )

一个偏方
(length (entget ee))
(90 . 2) ==> 23
(90 . 3) ==> 27
(90 . 4) ==> 31
(90 . 5) ==> 35
(90 . 1000)   ===> 4015
(cdr (nth 4010 (entget ee)))   ==> 点位值
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2005-12-5 19:59:46 | 显示全部楼层
用(setq brkpt (vlax-curve-getpointatparam lwpl 999.))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-6 11:48:02 | 显示全部楼层
谢谢楼上的几位,无效点的问题解决了,速度也提高了。
还得请问二楼的朋友,
(list enta point)
是什么意思,不明白。
谢谢!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8157个

财富等级: 富甲天下

发表于 2005-12-6 13:16:14 | 显示全部楼层
类同 (entsel) 的返回值
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-28 22:02 , Processed in 0.228112 second(s), 46 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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