找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 904|回复: 9

[求助] [求助]:编了一个程序但是没有达到自己的预期效果请指正

[复制链接]
发表于 2005-12-19 22:51:24 | 显示全部楼层 |阅读模式

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

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

×
预期效果:图中的圆被框选后被树块(块名字为1)自动替代,并自动根据圆的大小改变块的大小,并删除原来的圆。
我自己编的:不会根据圆的大小改变数块的大小,也不会删除原来的圆,也不会自动更新,只能框选择以后点enter键不松开一个一个的更新。
请指正!
下面是我的lsp
  1. (defun c:test()
  2.   (setvar "cmdecho" 0)
  3. (setq ss (ssget '((0 . "CIRCLE")))
  4.        i 0)
  5. (repeat (sslength ss)
  6.    (setq en (ssname ss i)
  7.          en_data (entget en))
  8.    (command "ucs" "w" en)
  9.    (setq cen (cdr (assoc 10 en_data)))
  10.    (command "insert" "1" cen "1" "1" "0")
  11.   (setq i (+ 1 i))
  12. )
  13. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 593个

财富等级: 财运亨通

发表于 2005-12-20 02:39:21 | 显示全部楼层
1 用园的半径作为图块的比例
2 (command ".ucs" "w" en) 此行可以去掉(前提是你在WCS下使用程序)
3 有些树的图块都含有属性,不知道插入的时候是不是提示属性,如果有的话,最后的插入语句作相应修改
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-12-20 07:53:03 | 显示全部楼层
用圆的内接矩形与块的外接矩形做比例因子,调整块的大小,OK!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 11307个

财富等级: 富甲天下

发表于 2005-12-20 10:18:32 | 显示全部楼层
试一下:

  1. (defun c:test()
  2. (setvar "cmdecho" 0)
  3. (setq ss (ssget '((0 . "CIRCLE")))
  4.        i 0)
  5. (command ".undo" "be")
  6. (repeat (sslength ss)
  7.   (setq en (ssname ss i) i (1+ i)
  8.         en_data (entget en))
  9.   (setq cen (cdr (assoc 10 en_data)))
  10.   (setq r (cdr (assoc 40 en_data)))
  11.   (command ".insert" "1" cen r r "0" ".erase" en "")
  12. )
  13. (command ".undo" "e")
  14. (princ)
  15. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-20 11:48:19 | 显示全部楼层
谢谢大家的思路
按这个思路以后那不是想替换什么就替换什么啊!
4楼的程序把





  1.   [FONT=courier new]
  2. (defun c:test()
  3. (setvar "cmdecho" 0)
  4. (setq ss (ssget '((0 . "CIRCLE")))
  5.        i 0)
  6. (command ".undo" "be")
  7. (repeat (sslength ss)
  8.   (setq en (ssname ss i) i (1+ i)
  9.         en_data (entget en))
  10.   (setq cen (cdr (assoc 10 en_data)))
  11.   (setq r (cdr (assoc 40 en_data)))
  12.   (command ".insert" "1" cen (* 2 r) (* 2 r) "0" ".erase" en "") ;将r改成(* 2 r)就是完美的我要的lsp
  13. )
  14. (command ".undo" "e")
  15. (princ)
  16. )
  17.   [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

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

使用道具 举报

 楼主| 发表于 2005-12-20 12:59:02 | 显示全部楼层
还想问一下(command ".undo" "be")和(command ".undo" "e")
所起的作用
假如将erase放在外面就不能删除原来的圆了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2005-12-20 13:28:58 | 显示全部楼层

  1. (defun c:test (/ ss i en el r cen sl)
  2.   (setvar "cmdecho" 0)
  3.   (if (setq ss (ssget '((0 . "CIRCLE"))))
  4.     (progn
  5.       (command ".undo" "be")
  6.       (setq sl (sslength ss)
  7.             i  -1
  8.       )
  9.       (repeat sl
  10.         (setq en  (ssname ss (setq i (1+ i)))
  11.               el  (entget en)
  12.               cen (cdr (assoc 10 en_data))
  13.               r          (cdr (assoc 40 en_data))
  14.         )
  15.         (command ".insert"
  16.                  "1"
  17.                  cen
  18.                  (* 2. r)
  19.                  (* 2. r)
  20.                  "0"
  21.         ) ;_开业改为 entmake 来插入块,效率更高
  22.       )
  23.       (command ".erase" ss "")
  24.       (command ".undo" "e")
  25.     )
  26.   )
  27.   (princ)
  28. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 11307个

财富等级: 富甲天下

发表于 2005-12-20 19:06:05 | 显示全部楼层
最初由 露水2 发布
[B]还想问一下(command ".undo" "be")和(command ".undo" "e")
所起的作用
假如将erase放在外面就不能删除原来的圆了。 [/B]

1、在(command ".undo" "be")和(command ".undo" "e")之间执行的所有COMMAND命令可以用单个字母U一步退回到命令执行前。
2、将ERASE放到REPEAT外面可以提高程序运行效率,如斑竹写的程序。

又:斑竹的程序有误,EN_DATA应改为EL。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-1-8 22:07:18 | 显示全部楼层
如果能把这个程序改成可以在任意对象之间进行替换的话就更实用了。等代楼主的佳音!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-29 01:20 , Processed in 0.423032 second(s), 49 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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