找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2190|回复: 13

[求助] 多选图元,把所选图元变成块,位置不变

[复制链接]

已领礼包: 449个

财富等级: 日进斗金

发表于 2013-7-17 20:32:49 | 显示全部楼层 |阅读模式

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

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

×
以下为代码!只是命令图块命的那部分错了!求高手解答!
(defun c:tt (/ )
  (if (null blockbo)
   (progn   
    (setq iblock 1)
    (setq blockbo (read (strcat "#bopt" (itoa iblock))))
   );假如是空的则#bopt1为第一次值
   (progn
    (setq iblock (1+ iblock))
    (setq blockbo (read (strcat "#bopt" (itoa iblock)))) ;read为返回字符串的第一个表或原子
   );假如不是空的则#bopt1每次加1
  )
  (prompt "\n请框选要变成块的对像")
  (setq blockss (ssget)) ;块选集
  (setq blockpt1 (cdr (assoc 10 (entget (ssname blockss 0)))));插入点
  (command "-block" "blockbo" blockpt1 blockss "") ;块名错了
  
);
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-7-17 21:14:48 | 显示全部楼层
用你的代码,第一次运行,可以做出块。
你把局部变量都加上吧,要不第二次运行就不是你希望的了。

评分

参与人数 1D豆 +2 收起 理由
xtdwynij + 2 我想要的就是全局变量这样块名才能不重复!

查看全部评分

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

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2013-7-17 21:15:55 | 显示全部楼层
块名错了,不要使用read,对一个字符串read,得到的是一个变量名,不是字符串,而块名应该是字符串,在命令block中块名blockbo应该直接使用变量名,而不是字符串。

评分

参与人数 1D豆 +5 收起 理由
xtdwynij + 5 技术引导讨论和指点奖!

查看全部评分

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

使用道具 举报

已领礼包: 449个

财富等级: 日进斗金

 楼主| 发表于 2013-7-17 21:18:53 | 显示全部楼层
我这里没有CAD,可以帮我运行一下么?块名解决了!长老一看就看出来了!总是这样!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-7-17 21:42:22 来自手机 | 显示全部楼层
构造一个随机数做块名,或者直接做匿名块

评分

参与人数 1D豆 +3 收起 理由
xtdwynij + 3 出题引导交流奖!

查看全部评分

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

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2013-7-17 21:45:45 | 显示全部楼层
xtdwynij 发表于 2013-7-17 21:18
我这里没有CAD,可以帮我运行一下么?块名解决了!长老一看就看出来了!总是这样!

  1. (defun c:tt (/)
  2.   (if (null blockbo)
  3.     (progn
  4.       (setq iblock  1
  5.             blockbo (strcat "#bopt" (itoa iblock))
  6.       )
  7.     )                                   ;假如是空的则#bopt1为第一次值
  8.     (progn
  9.       (setq iblock  (1+ iblock)
  10.             blockbo (strcat "#bopt" (itoa iblock))
  11.       )
  12.     )                                   ;假如不是空的则#bopt1每次加1
  13.   )
  14.   (princ "\n请框选要变成块的对像")
  15.   (setq blockss  (ssget)                ;块选集
  16.         blockpt1 (cdr (assoc 10 (entget (ssname blockss 0)))) ;插入点
  17.   )
  18.   (command "-block" blockbo blockpt1 blockss "")
  19.   (command ".insert" blockbo blockpt1 "" "" "")  ;立即插入块
  20.   (princ)
  21. )                                       ;

点评

请教一下能否实现,在框选成块时自己选择基点呢?  详情 回复 发表于 2013-7-18 08:19
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 449个

财富等级: 日进斗金

 楼主| 发表于 2013-7-17 21:56:28 | 显示全部楼层
多谢长老出手!长老回答我的的问题几乎是不用思考的!每次都能一语言中!另外,,,at788796师兄。我就是用的全局变量来做块名的!还能用无名块?是用的VLISP么?VLISP我连入门都算不上,只能算是了解!还请指点一下,让小菜长长眼界!

点评

本想写写,结果一搜高飞鸟版主早发过来,而且发表于 2007-1-25 21:12:21 http://www.xdcad.net/forum/forum.php?mod=viewthread&tid=618961 http://www.xdcad.net/forum/forum.php?mod=viewthread&tid=612652 另  详情 回复 发表于 2013-7-18 01:45
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-7-18 01:45:30 | 显示全部楼层
本帖最后由 st788796 于 2013-7-18 01:51 编辑
xtdwynij 发表于 2013-7-17 21:56
多谢长老出手!长老回答我的的问题几乎是不用思考的!每次都能一语言中!另外,,,at788796师兄。我就是用的全局 ...

本想写写,结果一搜高飞鸟版主早发过来,而且发表于 2007-1-25 21:12:21
http://www.xdcad.net/forum/forum.php?mod=viewthread&tid=618961
http://www.xdcad.net/forum/forum.php?mod=viewthread&tid=612652
另外一个
http://www.xdcad.net/forum/forum.php?mod=viewthread&tid=96797

用 xdapi 一句话
  1. (xdrx_block_make (ssget)  (getvar "viewctr") t )

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

使用道具 举报

发表于 2013-7-18 08:19:14 | 显示全部楼层

请教一下能否实现,在框选成块时自己选择基点呢?

点评

把块基点改为 getpoint  详情 回复 发表于 2013-7-18 08:45
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-7-18 08:45:24 来自手机 | 显示全部楼层
chenyu1618 发表于 2013-7-18 08:19
请教一下能否实现,在框选成块时自己选择基点呢?

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

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2013-7-18 08:57:17 | 显示全部楼层
chenyu1618 发表于 2013-7-18 08:19
请教一下能否实现,在框选成块时自己选择基点呢?

你是要“自动”选择基点还是“手动”交互选择基点呢?我的程序就是楼主的程序改的,基点是按选择集的第一个实体的某个特征点来定的,属于“自动”,如果需要“手动”,可以将插入点blockpt1采用getpoint交互输入得到。

一个技巧:选择集的第一个实体,在框选时按照cad设定的顺序进行,可能就是叠放次序,也就是后画的在前,这样,第一个实体就是选择集中“最后”(最上层)的实体,如果要设定一个实体为第一个实体,可以采用两种方法,一是将实体“前置”(不好的方法),另一个方法是先单选这个实体,在进行框选。

点评

谢谢解决我的问题,又学了一个小技巧。能不能帮忙写一个自己手选基点的VISP,刚刚开始学习,自己还不会写!  详情 回复 发表于 2013-7-18 19:30
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-7-18 19:30:48 | 显示全部楼层
ll_j 发表于 2013-7-18 08:57
你是要“自动”选择基点还是“手动”交互选择基点呢?我的程序就是楼主的程序改的,基点是按选择集的第一 ...

谢谢解决我的问题,又学了一个小技巧。能不能帮忙写一个自己手选基点的VISP,刚刚开始学习,自己还不会写!

点评

(defun c:tt (/) (if (null blockbo) (progn (setq iblock 1 blockbo (strcat "#bopt" (itoa iblock)) ) ) ;假如是空的则#bopt1为第一  详情 回复 发表于 2013-7-19 20:14
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 449个

财富等级: 日进斗金

 楼主| 发表于 2013-7-19 20:14:43 | 显示全部楼层
chenyu1618 发表于 2013-7-18 19:30
谢谢解决我的问题,又学了一个小技巧。能不能帮忙写一个自己手选基点的VISP,刚刚开始学习,自己还不会写 ...

(defun c:tt (/)
  (if (null blockbo)
    (progn
      (setq iblock  1
            blockbo (strcat "#bopt" (itoa iblock))
      )
    )                                   ;假如是空的则#bopt1为第一次值
    (progn
      (setq iblock  (1+ iblock)
            blockbo (strcat "#bopt" (itoa iblock))
      )
    )                                   ;假如不是空的则#bopt1每次加1
  )
  (princ "\n请框选要变成块的对像")
  (setq blockss  (ssget)                ;块选集
        blockpt1(point "请指定插入点"));插入点
  )
  (command "-block" blockbo blockpt1 blockss "")
  (command ".insert" blockbo blockpt1 "" "" "")  ;立即插入块
  (princ)
)                                       ;
                                   ;

点评

楼主要补的课太多,首先要通读下alisp有哪些函数,最好的教材就是联机帮助。 既要指定点当然要一和用户交互的取点函数,交互的包括Getxxxx等,这里用Getpoint, not point  详情 回复 发表于 2013-7-19 22:39
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-7-19 22:39:17 来自手机 | 显示全部楼层
xtdwynij 发表于 2013-7-19 20:14
(defun c:tt (/)
  (if (null blockbo)
    (progn

楼主要补的课太多,首先要通读下alisp有哪些函数,最好的教材就是联机帮助。
既要指定点当然要一和用户交互的取点函数,交互的包括Getxxxx等,这里用Getpoint, not point
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-25 10:41 , Processed in 0.243681 second(s), 56 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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