找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: evayleung

[求助] 求助我这个LSP是啥问题,执行后提示内部错误: !scandr.cpp@815: eWasOpenForWrite

[复制链接]

已领礼包: 2107个

财富等级: 金玉满堂

 楼主| 发表于 2020-8-17 18:33:41 | 显示全部楼层
dyjwyqz5221 发表于 2020-8-17 14:32
tt采用的是dimensition中点求最近axis线的模式,

因为有时候可能会遇到几条轴线经过一个标注的,最近的那条并不一定的所需要的。有可能是有平行于标注方向的一条,这样就打断不了。我为了这死机问题,只能想办法绕过那个函数。就造成效率比较低。日后有时间再想想怎么去优化。太多标注要打断了,光输命令点鼠标都把我烦死。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2107个

财富等级: 金玉满堂

 楼主| 发表于 2020-8-17 18:39:52 | 显示全部楼层
本帖最后由 evayleung 于 2020-8-17 18:41 编辑

  1. ;;;;;;;;;;;;;;;;;;;;标注自动断开
  2. (defun C:BZDK (/ ss)
  3.   (xdrx_begin)
  4.         (xdrx_sysvar_push '("CMDECHO" 0)'("osmode" 0))
  5.         (setq ss (xdrx_ssget '((0 . "DIMENSION"))))
  6.         (mapcar '(lambda (x / p_lst1 p_lst2 p_lst3 pt_lst ssa ss1 ss2 ss3 y)
  7.         (setq P_LST1 (xdrx_getpropertyvalue x "XLine1Point" "XLine2Point")
  8.          P_LST2 (xdrx_getpropertyvalue x "YLine1Point" "YLine2Point")
  9.           P_LST3 (xdrx_getpropertyvalue x "DimLine1Point" "DimLine2Point")
  10.          )
  11.           (Setq ss1 (ssget "F" P_LST1 '((0 . "LINE")(8 . "DOTE,AXIS")))
  12.           ss2 (ssget "F" P_LST2 '((0 . "LINE")(8 . "DOTE,AXIS")))
  13.           ss3 (ssget "F" P_LST3 '((0 . "LINE")(8 . "DOTE,AXIS")))
  14.            )
  15.           (setq ssa (xdrx_pickset_Union (xdrx_pickset_Union ss1 ss2) ss3))
  16.            (SETQ pt_lst (xdrx_curve_getinters P_LST1 ssa))
  17.            (setq pt_lst (append (list (car P_LST1)) pt_lst (list (cadr P_LST1))))
  18.            (setq pt_lst (XD::List:Divide_2x pt_lst))
  19.            (while pt_lst
  20.             (setq y (xdrx_entity_copy x))
  21.               (xdrx_setpropertyvalue y "XLine1Point" (caar pt_lst) "XLine2Point" (cadar pt_lst))
  22.               (Setq pt_lst (cdr pt_lst))
  23.              )
  24.              (xdrx_entity_delete x)
  25.            )
  26.                 (xdrx_pickset->ents ss)
  27.         )
  28.         (xdrx_sysvar_pop)
  29.         (xdrx_end)
  30. )
  31. ;;;;;;;;;;;;;;;;;;;表分成两个两个,把API里面的函数小改了一下
  32. ;;;;;;;;;;;;;(x,y,z)分成((x,y) (y,z))
  33. (defun XD::List:Divide_2x (lst / ret)
  34. (repeat (- (length lst) 1)
  35.    (setq ret (cons (list (car lst) (cadr lst)) ret))
  36.    (setq lst (cdr lst))
  37. )
  38. (reverse ret)
  39. )

点评

表分成两个有函数 (xd::list:snakepair lst)  详情 回复 发表于 2020-8-17 23:31
没时间调试,你是到哪个函数,出现死机的,贴出来下,帮看看  详情 回复 发表于 2020-8-17 23:29
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2020-8-17 23:29:14 | 显示全部楼层

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2020-8-17 23:31:09 | 显示全部楼层

表分成两个有函数
(xd::list:snakepair lst)

点评

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2020-8-17 23:54:36 | 显示全部楼层
选择49个以内是什么意思? 一个选择集包括49个实体, 还是你创建了超过49个选择集?
如果是创造了超过49个选择集,建议你不要这样写程序,LISP环境是有选则集最大数量限制的
API内部,默认选择集最多可以创建49个选择集

你可以通过 (xdrx-setvar "picksethome" no)指定创建选择集的房间号,后创建的选择集和先创建的选择集使用尽量少的房价号

可以临时通过增加API默认最大选择集数量解决,但不建议你这样做,因为总有个上限,如果你程序不加限制
(xdrx-setvar "picksetmaxhomeNum" 99)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2020-8-18 00:03:48 | 显示全部楼层
在  (xdrx_dimension_break x pt_lst)
前,加上
(xdrx-setvar "picksethome" 0) 试试

点评

刚试了一下,加上(xdrx-setvar "picksethome" 0) 这句后,效果会好很多,可选择的数量也增加了,但还是有上限,选择多了还是会死机。 上面这个BZDK2的代码还是会死机。但选择数量应该大于100个了。 然后我试着  详情 回复 发表于 2020-8-18 10:00
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2020-8-18 00:10:01 | 显示全部楼层
好的代码,该加判断的时候加判断
(Setq ss (ssget "F" (list p1 p2) '((8 . "DOTE,AXIS"))))
(SETQ pt_lst (xdrx_curve_getinters (list p1 p2) SS))
(xdrx_dimension_break x pt_lst)
应该改成:
(if (Setq ss (ssget "F" (list p1 p2) '((8 . "DOTE,AXIS"))))
   (progn
      (SETQ pt_lst (xdrx_curve_getinters (list p1 p2) SS))
       (xdrx_dimension_break x pt_lst)
   )
)

点评

谢谢版主的提醒。。因为我不是很懂写代码的,只是半吊子而已,有时就为了自己方便写一些而已。也没太过注意,就养成很多不良习惯。  详情 回复 发表于 2020-8-18 09:31
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2020-8-18 04:30:46 | 显示全部楼层
下载 2020.08.18日更新的API,试试以后用API写程序遇到问题,请及时发帖到论坛来,以便解决BUG
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2107个

财富等级: 金玉满堂

 楼主| 发表于 2020-8-18 09:28:35 | 显示全部楼层
newer 发表于 2020-8-17 23:31
表分成两个有函数
(xd::list:snakepair lst)

谢谢版主提醒。。。。。

点评

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

使用道具 举报

已领礼包: 2107个

财富等级: 金玉满堂

 楼主| 发表于 2020-8-18 09:31:17 | 显示全部楼层
newer 发表于 2020-8-18 00:10
好的代码,该加判断的时候加判断
(Setq ss (ssget "F" (list p1 p2) '((8 . "DOTE,AXIS"))))
(SETQ pt_l ...

谢谢版主的提醒。。因为我不是很懂写代码的,只是半吊子而已,有时就为了自己方便写一些而已。也没太过注意,就养成很多不良习惯。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2107个

财富等级: 金玉满堂

 楼主| 发表于 2020-8-18 10:00:40 | 显示全部楼层
本帖最后由 evayleung 于 2020-8-18 10:03 编辑
newer 发表于 2020-8-18 00:03
在  (xdrx_dimension_break x pt_lst)
前,加上
(xdrx-setvar "picksethome" 0) 试试

刚试了一下,加上(xdrx-setvar "picksethome" 0) 这句后,效果会好很多,可选择的数量也增加了,但还是有上限,选择多了还是会死机。
  1. (defun C:BZDK2 (/ ss)
  2.   (xdrx_begin)
  3.         (xdrx_sysvar_push '("CMDECHO" 0)'("osmode" 0))
  4.         (setq ss (xdrx_ssget '((0 . "DIMENSION"))))
  5.         (mapcar '(lambda (x / p_lst1 pt_lst ss1)
  6.             (setq P_LST1 (xdrx_getpropertyvalue x "XLine1Point" "XLine2Point"))         
  7.             (if (Setq ss1 (ssget "F" P_LST1 '((8 . "DOTE,AXIS"))))
  8.                (progn
  9.                (SETQ pt_lst (xdrx_curve_getinters P_LST1 ss1))
  10.                  (xdrx-setvar "picksethome" 0)
  11.                  (xdrx_dimension_break x pt_lst)
  12.                    )
  13.                  )
  14.                 )
  15.                 (xdrx_pickset->ents ss)
  16.         )
  17.         (xdrx_sysvar_pop)
  18.         (xdrx_end)
  19. )


上面这个BZDK2的代码还是会死机。但选择数量应该大于100个了。

然后我试着把它改为repeat的形式,就是下边的BZDK3,就可以通过了,这次不会死机了。
  1. (defun C:BZDK3 (/ i p_lst1 pt_lst ss x ss1)
  2.   (xdrx_begin)
  3.         (xdrx_sysvar_push '("CMDECHO" 0)'("osmode" 0))
  4.         (setq ss (ssget '((0 . "DIMENSION"))))
  5.         (repeat (setq i (sslength ss))
  6.             (setq x (ssname ss (setq i (1- i))))
  7.             (setq P_LST1 (xdrx_getpropertyvalue x "XLine1Point" "XLine2Point"))
  8.             (if (Setq ss1 (ssget "F" P_LST1 '((8 . "DOTE,AXIS"))))
  9.                   (progn
  10.                    (SETQ pt_lst (xdrx_curve_getinters P_LST1 ss1))
  11.                     (xdrx_dimension_break x pt_lst)
  12.                      )
  13.              )
  14.         )
  15.         (xdrx_sysvar_pop)
  16.         (xdrx_end)
  17. )



再次谢谢!

点评

我测试了下你的BZDK2,没问题呀。 命令: BZDK2 选择对象: 指定对角点: 找到 2100 个 选择对象: T  详情 回复 发表于 2020-8-18 15:12
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 199个

财富等级: 日进斗金

发表于 2020-8-18 15:12:35 | 显示全部楼层
本帖最后由 dyjwyqz5221 于 2020-8-18 15:22 编辑
evayleung 发表于 2020-8-18 10:00
刚试了一下,加上(xdrx-setvar "picksethome" 0) 这句后,效果会好很多,可选择的数量也增加了,但还是有 ...

我测试了下你的BZDK2,没问题呀。

命令: BZDK2
选择对象: 指定对角点: 找到 2100
选择对象:
T

在本程序中,设置不设置(xdrx-setvar "picksethome" 0)都没关系,
mapcar里面的选择集运行一次清空一次。
000-打断尺寸线.png

点评

安装0818版本的API就没死机现象了。  详情 回复 发表于 2020-8-18 17:38
我换了其他操作,例如是删除那个标注(xdrx_entity_delete x),或者把那个标注的第一个标注点坐标改一下 (xdrx_setpropertyvalue x "XLine1Point" (car pt_lst) "XLine2Point" (cadr pt_lst)) ,都不会死机。就是(x  详情 回复 发表于 2020-8-18 17:25
那可能是我自己CAD的设置问题。我已经换了三台电脑都是这回事,只是三台都是我自己的电脑,使用习惯,设置都是我自己的设置。就除了配置不一样而已。  详情 回复 发表于 2020-8-18 17:02
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2107个

财富等级: 金玉满堂

 楼主| 发表于 2020-8-18 17:02:59 | 显示全部楼层
dyjwyqz5221 发表于 2020-8-18 15:12
我测试了下你的BZDK2,没问题呀。

命令: BZDK2

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

使用道具 举报

已领礼包: 2107个

财富等级: 金玉满堂

 楼主| 发表于 2020-8-18 17:25:40 | 显示全部楼层
本帖最后由 evayleung 于 2020-8-18 17:26 编辑
dyjwyqz5221 发表于 2020-8-18 15:12
我测试了下你的BZDK2,没问题呀。

命令: BZDK2

  1. (defun C:BZDK (/ ss)
  2.   (xdrx_begin)
  3.         (xdrx_sysvar_push '("CMDECHO" 0)'("osmode" 0))
  4.         (setq ss (xdrx_ssget '((0 . "DIMENSION"))))
  5.         (mapcar
  6.           '(lambda (x / p_lst1 pt_lst ss1)
  7.           (setq P_LST1 (xdrx_getpropertyvalue x "XLine1Point" "XLine2Point"))
  8.           (if (Setq ss1 (ssget "F" P_LST1 '((8 . "DOTE,AXIS"))))
  9.            (progn
  10.            (SETQ pt_lst (xdrx_curve_getinters P_LST1 ss1))
  11.             ;(xdrx_dimension_break x pt_lst);;;;选择数量多了会死机
  12.             ;(xdrx_entity_delete x)  ;;;;换成这个就没问题
  13.             (xdrx_setpropertyvalue x "XLine1Point" (car pt_lst) "XLine2Point" (cadr pt_lst)) ;;;;换成这个就没问题
  14.                                  )
  15.                          )
  16.                  )
  17.                 (xdrx_pickset->ents ss)
  18.         )
  19.         (xdrx_sysvar_pop)
  20.         (xdrx_end)
  21. )


我换了其他操作,例如是删除那个标注(xdrx_entity_delete x),或者把那个标注的第一个标注点坐标改一下 (xdrx_setpropertyvalue x "XLine1Point" (car pt_lst) "XLine2Point" (cadr pt_lst)) ,都不会死机。就是(xdrx_dimension_break x pt_lst)这个会死机。真是奇了怪啊
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2020-8-18 17:26:41 | 显示全部楼层
evayleung 发表于 2020-8-18 09:28
谢谢版主提醒。。。。。

你下载2020.08.18更新的API了吗

点评

不好意思,今天早上已经下载了,然后忙其他的,可能忘记安装了,然后就是以为自己已经安装0818的了。 刚刚更新了一下,然后再运行我的那个LSP,就已经没有(xdrx_dimension_break x pt_lst)这个死机问题了。谢谢版主  详情 回复 发表于 2020-8-18 17:33
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 16:46 , Processed in 0.471506 second(s), 67 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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