找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: liuyj

[BUG报告] 0711的API,xdrx_xdata_get有问题

[复制链接]

已领礼包: 40个

财富等级: 招财进宝

发表于 2020-7-15 14:45:28 | 显示全部楼层
liuyj 发表于 2020-7-15 14:37
用上面那句,扩展数据部分如下:
(-3
      ("XDRX"

数据格式正常

(xdrx-xdata-get (car (entsel)) "abc")  这句,你返回的是什么?

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2020-7-15 14:58:55 | 显示全部楼层
liuyj 发表于 2020-7-15 14:37
用上面那句,扩展数据部分如下:
(-3
      ("XDRX"

命令: (xdrx-xdata-set (entlast) "abc" 1.0 2.0 3.0)
T

命令: (entget (entlast) '("*"))
((-1 . <图元名: 2704bb34a60>) (0 . "LINE") (330 . <图元名: 27047993a30>) (5 . "126") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbLine") (10 3412.58 1700.7 0.0) (11 6161.49 2421.59 0.0) (210 0.0 0.0 1.0) (-3 ("XDRX" (1000 . "abc") (1002 . "{") (1040 . 1.0) (1040 . 2.0) (1040 . 3.0) (1002 . "}"))))

命令: (xdrx-xdata-get (entlast) "abc")
(1.0 2.0 3.0)

命令: (xdrx-xdata-get (entlast) "xdrx" t)
(("abc" (1.0 2.0 3.0)))

命令: (xdrx-xdata-set (entlast) "def" '(3.0 3.0 "a"))
T

命令: (entget (entlast) '("*"))
((-1 . <图元名: 2704bb34a60>) (0 . "LINE") (330 . <图元名: 27047993a30>) (5 . "126") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbLine") (10 3412.58 1700.7 0.0) (11 6161.49 2421.59 0.0) (210 0.0 0.0 1.0) (-3 ("XDRX" (1000 . "abc") (1002 . "{") (1040 . 1.0) (1040 . 2.0) (1040 . 3.0) (1002 . "}") (1000 . "def") (1002 . "{") (1002 . "{") (1040 . 3.0) (1040 . 3.0) (1000 . "a") (1002 . "}") (1002 . "}"))))

命令: (xdrx-xdata-get (entlast) "def")
((3.0 3.0 "a"))

命令: (xdrx-xdata-get (entlast) "xdrx")
nil

命令: (xdrx-xdata-get (entlast) "xdrx" t)
(("abc" (1.0 2.0 3.0)) ("def" (3.0 3.0 "a")))

命令: (xdrx-xdata-get (entlast))
(("XDRX" (("abc" (1.0 2.0 3.0)) ("def" (3.0 3.0 "a")))))

命令: (xdrx-xdata-set (entlast) "second" "abc" 45.0 2.0)
T

命令: (entget (entlast) '("*"))
((-1 . <图元名: 2704bb34a60>) (0 . "LINE") (330 . <图元名: 27047993a30>) (5 . "126") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbLine") (10 3412.58 1700.7 0.0) (11 6161.49 2421.59 0.0) (210 0.0 0.0 1.0) (-3 ("XDRX" (1000 . "abc") (1002 . "{") (1040 . 1.0) (1040 . 2.0) (1040 . 3.0) (1002 . "}") (1000 . "def") (1002 . "{") (1002 . "{") (1040 . 3.0) (1040 . 3.0) (1000 . "a") (1002 . "}") (1002 . "}")) ("SECOND" (1000 . "abc") (1002 . "{") (1040 . 45.0) (1040 . 2.0) (1002 . "}"))))

命令: (xdrx-xdata-get (entlast))
(("XDRX" (("abc" (1.0 2.0 3.0)) ("def" (3.0 3.0 "a")))) ("SECOND" (("abc" (45.0 2.0)))))

命令: (xdrx-xdata-get (entlast) "second" t)
(("abc" (45.0 2.0)))


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

使用道具 举报

已领礼包: 8611个

财富等级: 富甲天下

 楼主| 发表于 2020-7-15 15:33:17 | 显示全部楼层
本帖最后由 liuyj 于 2020-7-15 15:35 编辑

这就弄明白了,用法不一样了。问题是我有很多程序必须按传统的方式存取,能加个开关保留以前的方式吗?

点评

不影响啊,你原来怎么写,还怎么写,考虑兼容以前了 默认一个字符串参数,是去读XDRX里面的。默认写,也是写到XDRX里面的  详情 回复 发表于 2020-7-15 17:47
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2020-7-15 17:47:01 | 显示全部楼层
liuyj 发表于 2020-7-15 15:33
这就弄明白了,用法不一样了。问题是我有很多程序必须按传统的方式存取,能加个开关保留以前的方式吗?

不影响啊,你原来怎么写,还怎么写,考虑兼容以前了
默认一个字符串参数,是去读XDRX里面的。默认写,也是写到XDRX里面的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8611个

财富等级: 富甲天下

 楼主| 发表于 2020-7-15 20:06:44 | 显示全部楼层
xdrx-xdata-get可以兼容以前,xdrx-xdata-set能不能也兼容?还是加个参数,不写到xdrx里面?现在写出来的数据,单位软件无法正常读取了

点评

你去重新下载下 API,回去试试 xdrx-xdata-get 兼容以前的格式,能读出来, xdrx-xdata-set 写成新格式,以后就都变成新格式了 如果你还有问题,发帖,把你的DWG,留一个实体即可,贴上来。  详情 回复 发表于 2020-7-15 21:47
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2020-7-15 21:47:41 | 显示全部楼层
liuyj 发表于 2020-7-15 20:06
xdrx-xdata-get可以兼容以前,xdrx-xdata-set能不能也兼容?还是加个参数,不写到xdrx里面?现在写出来的数 ...

你去重新下载下 API,回去试试

xdrx-xdata-get 兼容以前的格式,能读出来,
xdrx-xdata-set 写成新格式,以后就都变成新格式了

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

使用道具 举报

已领礼包: 8611个

财富等级: 富甲天下

 楼主| 发表于 2020-7-16 00:16:44 | 显示全部楼层
把这个问题再说清楚些,单位指定的设计软件是不能换的,我写的一点程序是对它的补充,所以数据的存储格式必须与之兼容,不论API的新的存储方式有多好,还是得按旧的方式来。我很多程序都用API改写过了,再改回去要花不少时间,所以希望无论读写都能兼容旧的格式。新的方式当然很好很强大,不需要跟软件兼容时肯定要优先选择的。
附上一个软件画的风管,我希望能写成中心线里的数据的样式。

新块.zip

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

点评

已经和你说了 xdrx-xdata-get 设计的是 既能读你原来旧的格式的,也能读现在的新的格式的 如果你那遇到了不能读旧的,那么就把数据文件传上来,分析下你的数据  详情 回复 发表于 2020-7-16 00:51
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2020-7-16 00:51:54 | 显示全部楼层
liuyj 发表于 2020-7-16 00:16
把这个问题再说清楚些,单位指定的设计软件是不能换的,我写的一点程序是对它的补充,所以数据的存储格式必 ...

已经和你说了
xdrx-xdata-get 设计的是 既能读你原来旧的格式的,也能读现在的新的格式的

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

使用道具 举报

已领礼包: 8611个

财富等级: 富甲天下

 楼主| 发表于 2020-7-16 01:24:01 | 显示全部楼层
本帖最后由 liuyj 于 2020-7-16 01:25 编辑

现在是写的问题,画出的风管用用新方式存储数据后设计软件读不出来。数据在上面文件的中心线里,如下。( (-1 . <图元名: 7ffffb06f60>)
    (0 . "LINE")
    (5 . "76")
    (102 . "{ACAD_XDICTIONARY")
    (360 . <图元名: 7ffffb06f70>)
    (102 . "}")
    (330 . <图元名: 7ffffb06820>)
    (100 . "AcDbEntity")
    (67 . 0)
    (410 . "Model")
    (8 . "H-ACDT-PSDT-RTML")
    (100 . "AcDbLine")
    (10 2.76584e+007 -5.48172e+007 0.0)
    (11 2.76506e+007 -5.48172e+007 0.0)
    (210 0.0 0.0 1.0)
    (-3
      (
        "KTGX"
        (1002 . "{")
        (1070 . 2)
        (1000 . "H-ACDT-PSDT-DSDP")
        (1002 . "}")
      )
      (
        "TFGX"
        (1002 . "{")
        (1000 . "(\"R\" 800 400 3000.00 3000.00 \"M\" 0.00)")
        (1002 . "}")
      )
      (
        "GXFL"
        (1002 . "{")
        (1040 . 13000.0)
        (1002 . "}")
      )
      (
        "GXFS"
        (1002 . "{")
        (1040 . 11.285)
        (1002 . "}")
      )
      (
        "BMZ"
        (1002 . "{")
        (1040 . 2.19089)
        (1002 . "}")
      )
      (
        "SS"
        (1002 . "{")
        (1040 . 0.0)
        (1002 . "}")
      )
      (
        "YCSS"
        (1002 . "{")
        (1040 . 0.033796)
        (1002 . "}")
      )
      (
        "JBSS"
        (1002 . "{")
        (1040 . 0.0)
        (1002 . "}")
      )
      (
        "标高"
        (1040 . 3.0)
      )
      (
        "是否修改实体"
        (1070 . 0)
      )
      (
        "流量"
        (1040 . 0.0)
      )
      (
        "宽度"
        (1040 . 800.0)
      )
      (
        "高度"
        (1040 . 400.0)
      )
      (
        "直径"
        (1040 . 800.0)
      )
      (
        "顶部标高"
        (1040 . 0.0)
      )
      (
        "竖管填充"
        (1070 . 0)
      )
      (
        "顶标高标注标志"
        (1000 . "顶")
      )
      (
        "中标高标注标志"
        (1000 . "中")
      )
      (
        "底标高标注标志"
        (1000 . "底")
      )
      (
        "截面"
        (1070 . 1)
      )
    )
  )


点评

(xdrx-xdata-get (car (entsel))) 选择对象: (("标高" (3.0)) ("是否修改实体" (0)) ("流量" (0.0)) ("宽度" (800.0)) ("高度" (400.0)) ("直径" (800.0)) ("顶部标高" (0.0)) ("竖管填充" (0)) ("顶标高标注标志  详情 回复 发表于 2020-7-16 22:18
试试 2020.07.16日更新的API (xdrx-xdata-get ent [appname][tag]) (xdrx-xdata-get ent) 得到所有的扩展数据 (xdrx-xdata-get ent tag) 得到 XDRX组里面的名字tag的扩展数据 (xdrx-xdata-get ent "ACAD" "DS  详情 回复 发表于 2020-7-16 21:52
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2020-7-16 21:52:33 | 显示全部楼层
liuyj 发表于 2020-7-16 01:24
现在是写的问题,画出的风管用用新方式存储数据后设计软件读不出来。数据在上面文件的中心线里,如下。( (- ...

试试 2020.07.16日更新的API

(xdrx-xdata-get ent [appname][tag])
(xdrx-xdata-get ent)  得到所有的扩展数据
(xdrx-xdata-get ent tag) 得到 XDRX组里面的名字tag的扩展数据
(xdrx-xdata-get ent "ACAD" "DSTYLE")  得到指定组的,指定TAG的扩展数据

(xdrx-xdata-set ent [appname][tag] .....)  写自定组下 TAG的扩展数据,不给appname, 默认写到xdrx组

(xdrx-xdata-remove ent t)  删除所有扩展数据
(xdrx-xdata-remove ent appname t) 删除指定组的所有扩展数据
(xdrx-xdata-remove ent tag)   删除所有组名是TAG(旧格式)和 XDRX组下TAG标签的扩展数据
(xdrx-xdata-remove ent appname tag) 删除指定组,指定TAG的扩展数据
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2020-7-16 22:18:44 | 显示全部楼层
liuyj 发表于 2020-7-16 01:24
现在是写的问题,画出的风管用用新方式存储数据后设计软件读不出来。数据在上面文件的中心线里,如下。( (- ...

(xdrx-xdata-get (car (entsel)))

选择对象: (("标高" (3.0)) ("是否修改实体" (0)) ("流量" (0.0)) ("宽度" (800.0)) ("高度" (400.0)) ("直径" (800.0)) ("顶部标高" (0.0)) ("竖管填充" (0)) ("顶标高标注标志" ("顶")) ("中标高标注标志" ("中")) ("底标高标注标志" ("底")) ("截面" (1)))




命令: (xdrx-setpropertyvalue (entlast) "dimtxt" 20 "dimrnd" 12 "dimtxsty" "宋体")
T

命令: (xdrx-xdata-get (entlast))
(("ACAD" (("DSTYLE" (340 "D1" 45 12.0 140 20.0)))))

命令: (xdrx-xdata-set (entlast) "example" 2.0 3.0 "fa")
T

命令: (xdrx-xdata-get (entlast))
(("ACAD" (("DSTYLE" (340 "D1" 45 12.0 140 20.0)))) ("XDRX" (("example" (2.0 3.0 "fa")))))

命令: (xdrx-xdata-get (entlast) "acad" t)
(("DSTYLE" (340 "D1" 45 12.0 140 20.0)))

命令: (xdrx-xdata-get "xdrx" t)
nil

命令: (xdrx-xdata-get (entlast) "xdrx" t)
(("example" (2.0 3.0 "fa")))

命令: (xdrx-xdata-get (entlast) "acad" "dstyle")
(340 "D1" 45 12.0 140 20.0)

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

使用道具 举报

已领礼包: 8611个

财富等级: 富甲天下

 楼主| 发表于 2020-7-17 00:00:54 | 显示全部楼层
(xdrx-xdata-set ent [appname][tag] .....) 这个appname其实跟默认的XDRX一样,也是新的存储方式。例如(xdrx-xdata-set ent “标高” 3.0)我希望写入的是这样的数据格式("标高"  (1040 . 3.0)),这样软件可以读出绘制出的风管的数据,但其实写进去的数据是("APPNAME" (1000 . "标高") (1002 . "{") (1040 . 3.0) (1002 . "}"))。能否为xdrx-xdata-set增加一个控制参数,如(xdrx-xdata-set ent T “标高” 3.0)就按新方式写入,(xdrx-xdata-set ent nil “标高” 3.0)就按旧方式写入?

点评

(xdrx-xdata-set ent “标高” 3.0) 写到XDRX 你软件 (xdrx-xdata-get ent “标高”) 直接就从默认的XDRX读出来了,有什么问题?  详情 回复 发表于 2020-7-17 00:39
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2020-7-17 00:39:04 | 显示全部楼层
liuyj 发表于 2020-7-17 00:00
(xdrx-xdata-set ent [appname][tag] .....) 这个appname其实跟默认的XDRX一样,也是新的存储方式。例如(x ...

(xdrx-xdata-set ent “标高” 3.0)
写到XDRX
你软件
(xdrx-xdata-get ent “标高”) 直接就从默认的XDRX读出来了,有什么问题? 你原来用API怎么写,代码不用改

命令: (xdrx-xdata-set (entlast) "标高" 100.0)
T

命令: (entget (entlast) '("*"))
((-1 . <图元名: 1bd7e47bd30>) (0 . "LINE") (330 . <图元名: 1c5756db230>) (5 . "2D63") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbLine") (10 134260.0 -5863.75 0.0) (11 134830.0 -5740.39 0.0) (210 0.0 0.0 1.0) (-3 ("XDRX" (1000 . "标高") (1002 . "{") (1040 . 100.0) (1002 . "}"))))

命令: (xdrx-xdata-get (entlast) "标高")
(100.0)

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

使用道具 举报

已领礼包: 8611个

财富等级: 富甲天下

 楼主| 发表于 2020-7-17 00:53:07 | 显示全部楼层
是我画出来的图,要别人能用,而他不一定会用API,绝大多数人只会用设计软件,我不能告诉他你必须得加载XDAPI,还得加载我写的程序才能读出数据,那样我画的图只能我自己修改了,对于稍微大点的工程来说,一个人就根本不可能完成,所以我们的图就必须能互相用,那么数据格式就必须按设计软件的保存,不知道我是不是说明白了。

点评

你读扩展数据的代码,不是用API写的? 写进去的时候用API? 要不你就都不用API,要不就都用,怎么能分两种情况? 你读出扩展数据的代码是什么,帖上来看看  详情 回复 发表于 2020-7-17 01:07
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2020-7-17 01:07:48 | 显示全部楼层
liuyj 发表于 2020-7-17 00:53
是我画出来的图,要别人能用,而他不一定会用API,绝大多数人只会用设计软件,我不能告诉他你必须得加载XDA ...

你读扩展数据的代码,不是用API写的? 写进去的时候用API?
要不你就都不用API,要不就都用,怎么能分两种情况?

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 22:13 , Processed in 0.250743 second(s), 58 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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