找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: spp_wall

[求助] 求一个 纬地道路横断面 文字避让处理 的程序

[复制链接]

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-10-26 14:03:13 | 显示全部楼层
q3_2006 发表于 2013-10-26 13:46
明白版主的意思了,我自己的图没这个问题,都是用来处理别人的图。。。有的软件不是很完美,用的人又完全 ...

记住那些软件再不完美,批量生成是也是循环,这个循环就是实体生成顺序,后期处理利用这个才能事半功倍

点评

我想自己会点LISP就是为了弥补各种软件不足。。。也是无奈的事。。  详情 回复 发表于 2013-10-26 14:07
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

发表于 2013-10-26 14:07:24 | 显示全部楼层
st788796 发表于 2013-10-26 14:03
记住那些软件再不完美,批量生成是也是循环,这个循环就是实体生成顺序,后期处理利用这个才能事半功倍

我想自己会点LISP就是为了弥补各种软件不足。。。也是无奈的事。。

点评

我也是刚准备开始学 现在只会加载和用lsp 还不会写呢! 谢谢你的帮助  详情 回复 发表于 2013-10-26 14:32
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 127个

财富等级: 日进斗金

 楼主| 发表于 2013-10-26 14:32:40 | 显示全部楼层
q3_2006 发表于 2013-10-26 14:07
我想自己会点LISP就是为了弥补各种软件不足。。。也是无奈的事。。

我也是刚准备开始学 现在只会加载和用lsp  还不会写呢!

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

使用道具 举报

已领礼包: 127个

财富等级: 日进斗金

 楼主| 发表于 2013-10-26 15:21:29 | 显示全部楼层
st788796 发表于 2013-10-26 13:36
试试这个,根据自己的图分析后调整,断面有 32 32 34 三种情况,用上面的分析程序,以后自己可以修改

我 知道意思了  

是每个断面的实体赋予 一个序号  然后按照一定的规律 挪动与序号相对应的实体

虽然你给的源码  但是我看不懂!

比如 xdrx_matrix_identity  XD::List:DivedBy  vmat (xdrx_matrix_settranslation mat0 '(0. 1.5 0.)) 等等  都不知道什么意思{:soso_e127:}

点评

那些数字就是要移动的实体在这个断面里的次序, 你还要分析一个断面组最后一个实体是什么,比如这个图,每个断面组最后是 dmx ,即地面线,不管这个断面组有多少个实体,最后一个肯定是 dmx 图层实体  详情 回复 发表于 2013-10-26 15:39
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-10-26 15:39:41 | 显示全部楼层
spp_wall 发表于 2013-10-26 15:21
我 知道意思了  

是每个断面的实体赋予 一个序号  然后按照一定的规律 挪动与序号相对应的实体

那些数字就是要移动的实体在这个断面里的次序, 你还要分析一个断面组最后一个实体是什么,比如这个图,每个断面组最后是 dmx ,即地面线,不管这个断面组有多少个实体,最后一个肯定是 dmx 图层实体
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-10-26 15:42:07 | 显示全部楼层
本帖最后由 st788796 于 2013-10-26 15:45 编辑

Tanslate 就是矩阵变换,这里只需要给一个位移向量,自己在图上量一下,上移多少、左移多少、右移多少,这几个都是固定的,不需要计算,如下图两个线,对上移左右是一样的,左移,x 为 负,右移 x 为 正
hdm.jpg

点评

基本上会了! 但是批量处理的时候还是会错 比如K1+100 K0+160 K0+240 K0+300 K0+360 K0+500 K0+600 不是移动字体 而是移动了dmx  详情 回复 发表于 2013-10-26 18:44
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 127个

财富等级: 日进斗金

 楼主| 发表于 2013-10-26 18:44:03 | 显示全部楼层
本帖最后由 spp_wall 于 2013-10-26 19:53 编辑
st788796 发表于 2013-10-26 15:42
Tanslate 就是矩阵变换,这里只需要给一个位移向量,自己在图上量一下,上移多少、左移多少、右移多少,这 ...

基本上会了!

但是批量处理的时候还是会错 比如K1+100 K0+160 K0+240 K0+300 K0+360  不是移动字体 而是移动了dmx  

vmat (xdrx_matrix_settranslation mat0 '(0. -1.5 0.))  表里面 第一个是左右  第二个是上下  第三个表示什么呢?

点评

错就是实体分组问题,我写的使用 ObjectID,用 Handle 更好些,这个 Handle 是不变的 ,vl-sort 可以排 Handle 的 向上的矢量为 '(0. 3. 0.) 就是移动一个正 Y, 向左移动向量 '(-6. 0. 0.) 就是移动一个负 X  详情 回复 发表于 2013-10-26 19:04
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-10-26 19:04:33 | 显示全部楼层
spp_wall 发表于 2013-10-26 18:44
基本上会了!

但是批量处理的时候还是会错 比如K1+100 K0+160 K0+240 K0+300 K0+360 K0+500 K0+600 不 ...

错就是实体分组问题,我写的使用 ObjectID,用 Handle 更好些,这个 Handle 是不变的 ,vl-sort 可以排  Handle 的

向上的矢量为 '(0. 3. 0.) 就是移动一个正 Y,
向左移动向量 '(-6. 0. 0.) 就是移动一个负 X
向右移动向量'(6. 0. 0.) 就是移动一个 正 X


点评

1: 是不是ObjectID 改成 Handle 就可以了呢? 还是要改其他东西呢  详情 回复 发表于 2013-10-26 19:29
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 127个

财富等级: 日进斗金

 楼主| 发表于 2013-10-26 19:29:18 | 显示全部楼层
本帖最后由 spp_wall 于 2013-10-26 19:37 编辑
st788796 发表于 2013-10-26 19:04
错就是实体分组问题,我写的使用 ObjectID,用 Handle 更好些,这个 Handle 是不变的 ,vl-sort 可以排   ...


1: 是不是ObjectID 改成 Handle 就可以了呢? 还是要改其他东西呢 这2个是什么意思呢?



点评

你测试下, 可以选一个断面测试下构造分组内的实体顺序, 如果最后一个是 dmx 就对了, 否则就 Reverse  详情 回复 发表于 2013-10-26 19:39
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-10-26 19:39:20 | 显示全部楼层
spp_wall 发表于 2013-10-26 19:29
1: 是不是ObjectID 改成 Handle 就可以了呢? 还是要改其他东西呢

你测试下, 可以选一个断面测试下构造分组内的实体顺序, 如果最后一个是 dmx 就对了, 否则就 Reverse

点评

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

使用道具 举报

已领礼包: 127个

财富等级: 日进斗金

 楼主| 发表于 2013-10-26 19:44:04 | 显示全部楼层
本帖最后由 spp_wall 于 2013-10-26 19:51 编辑
st788796 发表于 2013-10-26 19:39
你测试下, 可以选一个断面测试下构造分组内的实体顺序, 如果最后一个是 dmx 就对了, 否则就 Reverse

我试了 有错误的 都挤在一起 不知道 dmx是不是32
我记得好像序号和实体好像是能关联的吧  

如果不是dmx  应该如何处理呢!

点评

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-10-26 19:53:34 | 显示全部楼层
spp_wall 发表于 2013-10-26 19:44
我试了 有错误的 都挤在一起 不知道 dmx是不是32
我记得好像序号和实体好像是能关联的吧  

把你改的贴上来

点评

(defun c:tt1 (/ XD:istivedBy ss mat0 vmat lmat rmat) (defun XD:istivedBy (lst / ll nl) (while lst (if (/= (strcase (car (xdrx_getpropertyvalue (car lst) "Layer"))) "DMX"  详情 回复 发表于 2013-10-26 19:55
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 127个

财富等级: 日进斗金

 楼主| 发表于 2013-10-26 19:55:57 | 显示全部楼层
本帖最后由 spp_wall 于 2013-10-26 19:58 编辑

(defun c:tt1 (/ XD::List:DivedBy ss mat0 vmat lmat rmat)
  (defun XD::List:DivedBy (lst / ll nl)
    (while lst
      (if (/= (strcase (car (xdrx_getpropertyvalue (car lst) "Layer")))
       "DMX"
   )
(setq ll (cons (car lst) ll))
(setq nl (cons (reverse (cons (car lst) ll)) nl)
       ll nil
)
      )
      (setq lst (cdr lst))
    )
    (reverse nl)
  )
  (if (setq ss
      (ssget
        '((0 . "Text,*polyline,line")
   (8 . "shuju,zhix,dmx,lc,sjx,标高")
  )
      )
      )
    (progn
      (setq mat0 (xdrx_matrix_identity 3)
     vmat (xdrx_matrix_settranslation mat0 '(0. 1.5 0.)); 左右 上下 ;上为正;左移,x 为 负,右移 x 为 正
     lmat (xdrx_matrix_settranslation mat0 '(-2.5 0. 0.))
     rmat (xdrx_matrix_settranslation mat0 '(2.5 0. 0.))
     Xmat (xdrx_matrix_settranslation mat0 '(0. -1.5 0.))
      )
      (mapcar
'(lambda (x)
    (mapcar '(lambda (a)
        (xdrx_entity_transform a vmat)
      )
     (list (nth 1 x) (nth 2 x) (nth 7 x) (nth 8 x));提前序号2 3 8 9 组合成一个表

    )
    (cond
      ((= (length x) 34)
       (xdrx_entity_transform (nth 15 x) lmat); 把序号16进行lamt处理
       (xdrx_entity_transform (nth 21 x) rmat); 把序号22进行rmat处理
       (xdrx_entity_transform (nth 13 x) Xmat)
       (xdrx_entity_transform (nth 14 x) Xmat)
      )
      ((= (length x) 33)
       (xdrx_entity_transform (nth 14 x) lmat)
       (xdrx_entity_transform (nth 20 x) rmat)
      )
      ((= (length x) 32)
       (xdrx_entity_transform (nth 13 x) lmat)
       (xdrx_entity_transform (nth 19 x) rmat)
      )
      (t)
    )
  )
(XD::List:DivedBy
   (vl-sort
     (xdrx_pickset->ents ss)
     '(lambda (e1 e2);定义e1 e2
        (> (xdrx_getpropertyvalue e1 "ObjectID")
    (xdrx_getpropertyvalue e2 "ObjectID")
        )
      )
   )
)
      )
    )
  )
  (princ)
)
和你的好像也没什么区别!!!

点评

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-10-26 20:11:26 | 显示全部楼层
spp_wall 发表于 2013-10-26 19:55
(defun c:tt1 (/ XD:istivedBy ss mat0 vmat lmat rmat)
  (defun XD:istivedBy (lst / ll nl)
...

给你加上详细注释,再试试,自己编辑下帖子的代码部分
  1. (defun c:tt (/ XD::List:DivedBy ss mat0 vmat lmat rmat)
  2.   (defun XD::List:DivedBy (lst / ll nl)
  3.     (while lst
  4.       (if (/= (strcase (car (xdrx_getpropertyvalue (car lst) "Layer")))
  5.        "DMX"
  6.    )
  7. (setq ll (cons (car lst) ll))
  8. (setq nl (cons (reverse (cons (car lst) ll)) nl)
  9.        ll nil
  10. )
  11.       )
  12.       (setq lst (cdr lst))
  13.     )
  14.     (reverse nl)
  15.   )
  16.   (if (setq ss (ssget '((0 . "Text,*polyline,line");_实体类型
  17.    (8 . "shuju,zhix,dmx,lc,sjx,标高");_图层
  18.          )
  19.         );_过滤出断面上的字 线
  20.       )
  21.     (progn
  22.       (setq mat0 (xdrx_matrix_identity 3);_基本矩阵
  23.      vmat (xdrx_matrix_settranslation mat0 '(0. 1.5 0.));_向上偏移矩阵
  24.      lmat (xdrx_matrix_settranslation mat0 '(-6.0 0. 0.));_向右偏移矩阵
  25.      rmat (xdrx_matrix_settranslation mat0 '(6. 0. 0.));_向左偏移矩阵
  26.       )
  27.       (mapcar
  28. '(lambda (x)
  29.     (mapcar '(lambda (a)
  30.         (xdrx_entity_transform a vmat);_矩阵变换,就是移动
  31.       )
  32.      (list (nth 1 x) (nth 2 x) (nth 7 x) (nth 8 x));_向上偏移的实体
  33.     )
  34.     (cond
  35.       ((= (length x) 34);_两侧有放坡的是 34
  36.        (xdrx_entity_transform (nth 15 x) lmat);_左侧
  37.        (xdrx_entity_transform (nth 21 x) rmat);_右侧
  38.       )
  39.       ((= (length x) 33);_单侧放坡是 33
  40.        (xdrx_entity_transform (nth 14 x) lmat)
  41.        (xdrx_entity_transform (nth 20 x) rmat)
  42.       )
  43.       ((= (length x) 32);_两侧都不放坡是 32
  44.        (xdrx_entity_transform (nth 13 x) lmat)
  45.        (xdrx_entity_transform (nth 19 x) rmat)
  46.       )
  47.       (t)
  48.     )
  49.   )
  50. (XD::List:DivedBy
  51.    (vl-sort
  52.      (xdrx_pickset->ents ss);_选择集转为实体列表
  53.      '(lambda (e1 e2)
  54.        ;|
  55.                (> (xdrx_getpropertyvalue e1 "ObjectID")
  56.     (xdrx_getpropertyvalue e2 "ObjectID")
  57.         )
  58.         |;
  59.         (< (cdr (assoc 5 (entget e1)));_ API 有 Bug ,用 Entget
  60.     (cdr (assoc 5 (entget e2)))
  61.         )
  62.       )
  63.    );_按句柄排序,即实体生成顺序
  64. )
  65.       )
  66.     )
  67.   )
  68.   (princ)
  69. )

点评

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

使用道具 举报

已领礼包: 127个

财富等级: 日进斗金

 楼主| 发表于 2013-10-26 20:38:22 | 显示全部楼层
本帖最后由 spp_wall 于 2013-10-26 20:41 编辑
st788796 发表于 2013-10-26 20:11
给你加上详细注释,再试试,自己编辑下帖子的代码部分

这次 用了命令  没有反应呢!!!!

而且  我发现  用 ObjectID  有的左边框选到右边没反应  右边框选到左边  又可以实现程序!

点评

实体顺序问题,这个图中第一个是 dmx ,你试试下面的代码,就加了个 Reverse  详情 回复 发表于 2013-10-26 21:24
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-2 18:22 , Processed in 0.585040 second(s), 57 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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