找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2432|回复: 20

[求助] 大家看看有什么问题?

[复制链接]
发表于 2014-12-8 11:17:41 | 显示全部楼层 |阅读模式

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

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

×
以前的能用,现在逐行执行也没错,但整体执行就出错。CAD14 12都试过了。

blockch.lsp

906 Bytes, 下载次数: 8, 下载积分: D豆 -1 , 活跃度 1

Drawing2.zip

28.68 KB, 下载次数: 2, 下载积分: D豆 -1 , 活跃度 1

你面已经有个块了

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

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-12-8 12:06:20 | 显示全部楼层
你提供的信息太少了,至少让人家知道是做什么的,怎么做,怎么交互,到哪地方有什么错误,错误提示是什么啊。另外,你发在API技术支持,你的程序是API写的吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 264个

财富等级: 日进斗金

发表于 2014-12-8 12:44:50 来自手机 | 显示全部楼层
大致看了看程序,用api写的,楼主是要对块定义内实体处理图层和颜色吧,这个写法用的是setsstodb 循环,现在流行集合加setpropertyvalue方式
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-12-8 13:59:15 | 显示全部楼层
这样试试
  1. ;;功能把选择的块内所有实体包括嵌套块改到DX图层
  2. (defun c:bch (/ ename bname ent layname olderr myerror)
  3.   (defun en-bl (bname layname / bt blkdef ents bts)
  4.     (if        (= (xdrx_getpropertyvalue bname "IsA") "AcDbBlockReference")
  5.       (progn
  6.         (setq bt   (xdrx_getpropertyvalue bname "BlockTableRecord")
  7.               ents (xdrx_getpropertyvalue (cadr bt) "allEntities")
  8.         )
  9.         (if (not (member (car bt) bts))
  10.           (mapcar
  11.             '(lambda (x)
  12.                (if (/= (xdrx_getpropertyvalue bname "IsA")
  13.                        "AcDbBlockReference"
  14.                    )
  15.                  (xdrx_setpropertyvalue x "Layer" layname "color" 256)
  16.                  (en-bl x "dx")
  17.                )
  18.              )
  19.             ents
  20.           )
  21.         )
  22.         (setq bts (cons (car bt) bts))
  23.       )
  24.     )
  25.   )
  26.   (if (not (tblsearch "layer" "dx"))
  27.     (xdrx_layer_make "dx")
  28.   )
  29.   (if (setq ename (car (xdrx_entsel "\n选择块:" '((0 . "INSERT")))))
  30.     (progn
  31.       (en-bl ename "DX")
  32.       (xdrx_object_regen)
  33.     )
  34.   )
  35.   (princ)
  36. )

点评

多谢!昨天下午试了许多次,发现有时提示错误,不知道原因。今天试了下的确存在块内只有1个实体时得到的ENT并不是表而产生错误,多谢提醒。  详情 回复 发表于 2014-12-9 16:02
还可以再精简的, [*] (if (not (tblsearch "layer" "dx")) [*] (xdrx_layer_make "dx") [*] ) 这个可以不要的,xdrx_setpropertyvalue 会自动建立的,如果不存在。  详情 回复 发表于 2014-12-8 16:07
多谢了。setpropertyvalue写的够精简的。我setpropertyvalue还不是太熟,弄了半天。  详情 回复 发表于 2014-12-8 16:00
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2014-12-8 16:00:26 | 显示全部楼层

多谢了。setpropertyvalue写的够精简的。我setpropertyvalue还不是太熟,弄了半天。

点评

你的代码看着有问题啊,(setq ename1 (entnext ename1)) 这个不保证是块内的下个实体啊。而且他中断不了循环啊?  详情 回复 发表于 2014-12-8 16:35
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-12-8 16:07:33 | 显示全部楼层

还可以再精简的,


  •                                
    登录/注册后可看大图
      (if (not (tblsearch "layer" "dx"))

  •                                
    登录/注册后可看大图
        (xdrx_layer_make "dx")

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-12-8 16:22:50 | 显示全部楼层
newer 发表于 2014-12-8 16:07
还可以再精简的,

本来想没有这个图层退出不执行的:)

点评

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-12-8 16:35:39 | 显示全部楼层
hwwrrbb 发表于 2014-12-8 16:00
多谢了。setpropertyvalue写的够精简的。我setpropertyvalue还不是太熟,弄了半天。

你的代码看着有问题啊,(setq ename1 (entnext ename1)) 这个不保证是块内的下个实体啊。而且他中断不了循环啊?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-12-8 16:54:00 | 显示全部楼层
st788796 发表于 2014-12-8 16:22
本来想没有这个图层退出不执行的

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-12-8 16:58:09 | 显示全部楼层
newer 发表于 2014-12-8 16:54
其实不用管了,用户想怎么就怎么呗。

这里面还有个 Bug ,如果图块只有一个实体,mapcar 会出错的

allEntities 在只有一个实体的时候返回实体不是表,API需要修正

点评

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-12-8 18:03:04 | 显示全部楼层
st788796 发表于 2014-12-8 16:58
这里面还有个 Bug ,如果图块只有一个实体,mapcar 会出错的

allEntities 在只有一个实体的时候返回实体 ...

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-12-8 18:12:27 | 显示全部楼层
如果用老的方法编程,可以用xdrx_object_get 和 xdrx_object_next获得块内的实体
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-12-8 18:56:31 | 显示全部楼层
本帖最后由 newer 于 2014-12-8 18:58 编辑

用老的方法,你试试这样写:

  1. (defun c:bch (/ bname e ename layname) ; -------
  2.   (defun en-bl (bname layname / e)
  3.     (xdrx_object_get "block" bname)
  4.     (while (setq e (xdrx_object_next))
  5.      (if (= (xdrx_GetEntDxf 0) "INSERT") ; 嵌套块
  6.         (progn
  7.           (en-bl (xdrx_GetEntDxf 2) layname)
  8.         )
  9.         (progn
  10.           (xdrx_setenttodb (last e))
  11.           (xdrx_ModEnt 8 layname 62 256) ; 老命令
  12.         )
  13.       )                                       ; if
  14.     )                                       ; while
  15.     (print)
  16.   )                                       ; defun
  17.                                        ; ------------------------------
  18.   (setq ename (car (xdrx_entsel "\n选择块:" '((0 . "INSERT")))))
  19.   (xdrx_SetEntToDb ename)
  20.   (setq bname (xdrx_GetEntDxf 2))
  21.   (en-bl bname "DX")
  22.   (xdrx_object_regen)
  23.   (princ)
  24. )

点评

里面加了一条判断块内有多个重复子块的语句(红色的),就出现问题(有时是执行过程出问题,有时是执行完退出时出问题),高手能分析一下吗? [*](defun c:bch (/ bname e ename layname bts) ; -------[/backc  详情 回复 发表于 2014-12-12 09:10
多谢!也试过了,大地形图处理完全可以的。  详情 回复 发表于 2014-12-9 16:06
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-12-8 19:02:51 来自手机 | 显示全部楼层
newer 发表于 2014-12-8 18:56
用老的方法,你试试这样写:

怎么是(last e)

点评

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-19 18:46 , Processed in 0.238383 second(s), 70 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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