找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 4326|回复: 15

[已解决] 求在多条多义线的两侧5个CAD单位的块参照“GCD”上写文字画圆的代码

[复制链接]
发表于 2014-1-17 22:20:41 | 显示全部楼层 |阅读模式
悬赏200D豆已解决
本帖最后由 清风明月10 于 2014-1-18 10:30 编辑

求在多条多义线的两侧5个CAD单位的块参照“GCD”上写文字画圆的代码

我在地形图上布了很多剖切线。这张图是用名为“GCD”的块参照的插入点Z值来表达高程的。我希望在这些剖切线两侧5个单位内的每个GCD块参照的插入点上画一个圆(直径2个单位,在“000高程”图层上,圆的Z值为高程),还要写上一个单行文本,文本内容为高程,其Z值点亦为高程。我发上“求在多线两侧5米范围内的块参照GCD的插入点上画圆写文字.dwg”,代码可以在此处调试。要理解我上面话的意思,也可以参看此文件。
请点击此处下载

查看状态:需购买或无权限

您的用户组是:游客

文件名称:求在多线两侧5米范围内的块参照GCD的插入点上画圆写文字.rar 
下载次数:13  文件大小:843.5 KB 
下载权限: 不限 以上  [免费赚D豆]





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

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-1-17 22:20:42 | 显示全部楼层
清风明月10 发表于 2014-1-18 09:55
有始有终,完善一下,好吗?求你了!

  1. (defun c:tt (/ ss s box tf)
  2.   (if (setq ss (ssget '((0 . "lwpolyline") (8 . "000剖切线"))))
  3.     (progn
  4.       (XD::Doc:DisableOsmode)
  5.       (setq box (xdrx_entity_box ss))
  6.       (if (apply 'xdrx_document_isPtOutScreen box)
  7.         (progn
  8.           (setq tf t)
  9.           (xdrx_document_zoomw (car box) (caddr box))
  10.         )
  11.       )
  12.       (XD::Begin)
  13.       (if (not (tblsearch "layer" "000高程"))
  14.         (xdrx_layer_make "000高程" 1)
  15.       )
  16.       (xdrx_setmark)
  17.       (mapcar
  18.         '(lambda (x / pl1 pl2 pts s)
  19.            (setq pl1 (xdrx_curve_offset x 5.)
  20.                  pl2 (xdrx_curve_offset x -5.)
  21.                  pts (append pl1 (reverse pl2))
  22.            )
  23.            (if (setq s (ssget "CP" pts '((2 . "GC200"))))
  24.              (progn
  25.                (mapcar '(lambda        (a / p)
  26.                           (setq p (xdrx_getpropertyvalue a "Position"))
  27.                           (xdrx_circle_make p 1.)
  28.                           (xdrx_text_make
  29.                             p
  30.                             (rtos (last p) 2 3)
  31.                             8 ;_字高
  32.                             (xdrx_getpropertyvalue a "Roatation")
  33.                           )
  34.                         )
  35.                        (xdrx_pickset->ents s)
  36.                )
  37.              )
  38.            )
  39.          )
  40.         (xdrx_pickset->ents ss)
  41.       )
  42.       (if (setq s (xdrx_getss))
  43.         (xdrx_entity_setlayer
  44.           s
  45.           "000高程"
  46.         )
  47.       )
  48.       (if tf
  49.         (vl-cmdf ".zoom" "p")
  50.       )
  51.       (XD::End)
  52.       (XD::Doc:EnableOsMode)
  53.     )
  54.   )
  55.   (princ)
  56. )

点评

我发现有三个问题:第1个问题是我没有说准确,就是剖切线不一定在“000剖切线”上,它由我点选的一根剖切线所在的图层决定; 第二个问题,可能是你没有用我的发的图去调试代码,因为代码实际是无法运行出结果的。  详情 回复 发表于 2014-1-18 10:26
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-1-18 09:30:52 | 显示全部楼层
本帖最后由 st788796 于 2014-1-18 09:34 编辑

仅适用楼主样图
  1. (defun c:tt (/ e pl1 pl2 pts ss s box)
  2.   (if (setq e (car (xdrx_entsel
  3.                      "\nPick Pline: "
  4.                      '((0 . "lwpolyline") (8 . "线路"))
  5.                    )
  6.               )
  7.       )
  8.     (progn
  9.       (setq pl1        (xdrx_curve_offset e 5.)
  10.             pl2        (xdrx_curve_offset e -5.)
  11.             pts        (append pl1 (reverse pl2))
  12.             box        (xdrx_entity_box e)
  13.       )
  14.       (if (apply 'xdrx_document_isPtOutScreen box)
  15.         (xdrx_document_zoomw (car box) (caddr box))
  16.       )
  17.       (XD::Doc:DisableOsmode)
  18.       (if (setq ss (ssget "CP" pts '((2 . "GC200"))))
  19.         (progn
  20.           (XD::Begin)
  21.           (if (not (tblsearch "layer" "000高程"))
  22.             (xdrx_layer_make "000高程" 1)
  23.           )
  24.           (xdrx_setmark)
  25.           (mapcar '(lambda (x / p)
  26.                      (setq p (xdrx_getpropertyvalue x "Position"))
  27.                      (xdrx_circle_make p 1.)
  28.                      (xdrx_text_make
  29.                        p
  30.                        (rtos (last p) 2 3)
  31.                        8 ;_字高
  32.                        (xdrx_getpropertyvalue x "Roatation")
  33.                      )
  34.                    )
  35.                   (xdrx_pickset->ents ss)
  36.           )
  37.           (if (setq s (xdrx_getss))
  38.             (xdrx_entity_setlayer
  39.               s
  40.               "000高程"
  41.             )
  42.           )
  43.           (XD::End)
  44.         )
  45.       )
  46.       (XD::Doc:EnableOsMode)
  47.     )
  48.   )
  49.   (princ)
  50. )

点评

对不起,图发错了,可能是我修改后没有保存好的原故,发上去的不是我想要的图。是下面这张图。是多条剖切线同时处理。这些剖切线都位于“000剖切线”图层,反过来也成立 ,所有在“000剖切线”图层中的多线都是剖切  详情 回复 发表于 2014-1-18 09:48

评分

参与人数 1D豆 +5 收起 理由
清风明月10 + 5 热心帮忙奖!

查看全部评分

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

使用道具 举报

 楼主| 发表于 2014-1-18 09:48:02 | 显示全部楼层

对不起,图发错了,可能是我修改后没有保存好的原故,发上去的不是我想要的图。是下面这张图。是多条剖切线同时处理。这些剖切线都位于“000剖切线”图层,反过来也成立 ,所有在“000剖切线”图层中的多线都是剖切线
请点击此处下载

查看状态:需购买或无权限

您的用户组是:游客

文件名称:求在多线两侧5米范围内的块参照GCD的插入点上画圆写文字(多条剖切线).rar 
下载次数:4  文件大小:851.1 KB 
下载权限: 不限 以上  [免费赚D豆]




点评

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-1-18 09:50:49 | 显示全部楼层
清风明月10 发表于 2014-1-18 09:48
对不起,图发错了,可能是我修改后没有保存好的原故,发上去的不是我想要的图。是下面这张图。是多条剖切 ...

把过滤条件修改以下, 有单选了, 批量就是增加一层 mapcar xdrx_pickset->ents

点评

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

使用道具 举报

 楼主| 发表于 2014-1-18 09:55:53 | 显示全部楼层
st788796 发表于 2014-1-18 09:50
把过滤条件修改以下, 有单选了, 批量就是增加一层 mapcar xdrx_pickset->ents

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

使用道具 举报

 楼主| 发表于 2014-1-18 10:26:32 | 显示全部楼层

我发现有三个问题:第1个问题是我没有说准确,就是剖切线不一定在“000剖切线”上,它由我点选的一根剖切线所在的图层决定;
第二个问题,可能是你没有用我的发的图去调试代码,因为代码实际是无法运行出结果的。
第三个问题,我希望不只是"lwpolyline",而是“*line”,不知道能否成立?我的愿望是让剖切线可以容纳更多的线的种类

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-1-18 10:33:30 | 显示全部楼层
清风明月10 发表于 2014-1-18 10:26
我发现有三个问题:第1个问题是我没有说准确,就是剖切线不一定在“000剖切线”上,它由我点选的一根剖切 ...

1 自己增加一个拾取获取图层步骤
2 你发的图绿线修改为 000剖切线
3 修改 ssget 过滤表
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-1-18 10:41:07 | 显示全部楼层
  1. (defun c:tt (/ e lyr ss s box tf)
  2.   (if (and (setq e (car (xdrx_entsel "\n拾取样本图层实体: ")))
  3.            (setq lyr (xdrx_getentdxf 8))
  4.            (setq ss (ssget (list '(0 . "*line") (cons 8 lyr))))
  5.       )
  6.     (progn
  7.       (XD::Doc:DisableOsmode)
  8.       (setq box (xdrx_entity_box ss))
  9.       (if (apply 'xdrx_document_isPtOutScreen box)
  10.         (progn
  11.           (setq tf t)
  12.           (xdrx_document_zoomw (car box) (caddr box))
  13.         )
  14.       )
  15.       (XD::Begin)
  16.       (if (not (tblsearch "layer" "000高程"))
  17.         (xdrx_layer_make "000高程" 1)
  18.       )
  19.       (xdrx_setmark)
  20.       (mapcar
  21.         '(lambda (x / pl1 pl2 pts s)
  22.            (setq pl1 (xdrx_curve_offset x 5.)
  23.                  pl2 (xdrx_curve_offset x -5.)
  24.                  pts (append pl1 (reverse pl2))
  25.            )
  26.            (if (setq s (ssget "CP" pts '((2 . "GC200"))))
  27.              (progn
  28.                (mapcar '(lambda        (a / p)
  29.                           (setq p (xdrx_getpropertyvalue a "Position"))
  30.                           (xdrx_circle_make p 1.)
  31.                           (xdrx_text_make
  32.                             p
  33.                             (rtos (last p) 2 3)
  34.                             8 ;_字高
  35.                             (xdrx_getpropertyvalue a "Roatation")
  36.                           )
  37.                         )
  38.                        (xdrx_pickset->ents s)
  39.                )
  40.              )
  41.            )
  42.          )
  43.         (xdrx_pickset->ents ss)
  44.       )
  45.       (if (setq s (xdrx_getss))
  46.         (xdrx_entity_setlayer
  47.           s
  48.           "000高程"
  49.         )
  50.       )
  51.       (if tf
  52.         (vl-cmdf ".zoom" "p")
  53.       )
  54.       (XD::End)
  55.       (XD::Doc:EnableOsMode)
  56.     )
  57.   )
  58.   (princ)
  59. )

点评

这9楼的代码有BUG,只能得到其中一条多线的结果,并没有对整个图层的线进行循环动作。  详情 回复 发表于 2014-1-18 11:04
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

 楼主| 发表于 2014-1-18 11:04:14 | 显示全部楼层

这9楼的代码有BUG,只能得到其中一条多线的结果,并没有对整个图层的线进行循环动作。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-1-18 11:08:48 | 显示全部楼层
清风明月10 发表于 2014-1-18 11:04
这9楼的代码有BUG,只能得到其中一条多线的结果,并没有对整个图层的线进行循环动作。

点选后要再次选择的,如果不要框选 ssge 后用 "x" 选项

点评

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-28 02:15 , Processed in 0.783420 second(s), 65 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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