找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1350|回复: 16

[LISP程序]:修正选择性粘贴的表格线

[复制链接]
发表于 2004-7-19 12:30:42 | 显示全部楼层 |阅读模式

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

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

×
使用选择性粘贴的Excel表格线往往不相交,这个小程序可以将表格线自动修正
使用时直接选取粘贴后的表格线就行了。

  1. (Defun c:fixtable (/           sset           idx           objx           obj           o10
  2.                    o11           minx-v  vtk           hot           maxy-h  maxy-hx
  3.                    minx-vx miny-h  miny-h-obj           osm           hor
  4.                    s10           s11     top
  5.                   )
  6.   (setq osm (getvar "osmode"))
  7.   (if (setq sset (ssget (list (cons 0 "line"))))
  8.     (progn
  9.       (setq idx         -1
  10.             objx (ssadd)
  11.       )
  12.       (repeat (sslength sset)
  13.         (setq obj (ssname sset (setq idx (1+ idx)))
  14.               o10 (cdr (assoc 10 (entget obj)))
  15.               o11 (cdr (assoc 11 (entget obj)))
  16.         )
  17.         (cond ((equal (car o10) (car o11) 0.01)
  18.                (if (or (null minx-v)
  19.                        (and minx-v (> minx-v (car o10)))
  20.                    )
  21.                  (setq minx-v (car o10)
  22.                        vtk    obj
  23.                  )
  24.                )
  25.               )
  26.               ((equal (cadr o10) (cadr o11) 0.01)
  27.                (ssadd obj objx)
  28.                (if (or (null maxy-h)
  29.                        (and maxy-h (< maxy-h (cadr o10)))
  30.                    )
  31.                  (setq maxy-h (cadr o10) top obj)
  32.                )
  33.                (if (or (null miny-h)
  34.                        (and miny-h (> miny-h (cadr o10)))
  35.                    )
  36.                  (setq miny-h (cadr o10)
  37.                        hor    obj
  38.                  )
  39.                )
  40.               )
  41.         )
  42.       )
  43.       (setq s10        (cdr (assoc 10 (entget hor)))
  44.             s11        (cdr (assoc 11 (entget hor)))
  45.       )
  46.       (if (> (car s10) (car s11))
  47.         (setq miny-h s11)
  48.         (setq miny-h s10)
  49.       )
  50.       (setq s10           (cdr (assoc 10 (entget vtk)))
  51.             s11           (cdr (assoc 11 (entget vtk)))            
  52.       )
  53.       (if (> (cadr s10) (cadr s11))
  54.         (setq minx-v s11)
  55.         (setq minx-v s10)
  56.       )
  57.       (setvar "osmode" 0)
  58.       (command "_.Move" objx "" miny-h minx-v)
  59.       (setq vtk        (entget vtk)
  60.             maxy-h (list (car minx-v) (cadr (cdr (assoc 10 (entget top)))))
  61.             vtk        (subst (cons 10 minx-v) (assoc 10 vtk) vtk)
  62.             vtk        (subst (cons 11 maxy-h) (assoc 11 vtk) vtk)
  63.       )
  64.       (entmod vtk)
  65.     )
  66.   )
  67.   (redraw)
  68.   (setvar "osmode" osm)
  69.   (princ)
  70. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-7-24 18:50:15 | 显示全部楼层
程序是不是有问题,不起什么作用。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-7-24 23:14:45 | 显示全部楼层
选择性粘贴的Excel表格线是POLYLINE
先炸开,再调用老程序

我将程序修改了一下,可以识别多义线了,同时顺便把所有文字的对齐方式改为MiddleCenter.

  1. (Defun c:fixtable (/          HOR         IDX        LL0    LL1    MAXY-H MINX-V
  2.                    MINY-H O10         O11        OBJ    OBJX   OBJY   OSM
  3.                    S10          S11         SSET        TOP    VLO    VTK
  4.                   )
  5.   (setq osm (getvar "osmode"))
  6.   (if (setq sset (ssget (list (cons 0 "*polyline,line,text"))))
  7.     (progn
  8.       (setq idx         -1
  9.             objx (ssadd)
  10.             objy (ssadd)
  11.       )
  12.       (repeat (sslength sset)
  13.         (setq obj (ssname sset (setq idx (1+ idx))))
  14.         (if (= (cdr (assoc 0 (entget obj))) "POLYLINE")
  15.           (progn
  16.             (command "_.Explode" obj)
  17.             (setq obj (entlast))
  18.           )
  19.         )
  20.         (cond ((= (cdr (assoc 0 (entget obj))) "TEXT")
  21.                (setq vlo (vlax-ename->vla-object obj)
  22.                      obj (entget obj)
  23.                )
  24.                (vla-getboundingbox vlo 'll0 'ur)
  25.                (setq obj (subst (cons 72 1) (assoc 72 obj) obj)
  26.                      obj (subst (cons 73 2) (assoc 73 obj) obj)
  27.                )
  28.                (entmod obj)
  29.                (vla-getboundingbox vlo 'll1 'ur)
  30.                (vla-move vlo ll1 ll0)
  31.               )
  32.               ((= (cdr (assoc 0 (entget obj))) "LINE")
  33.                (setq o10 (cdr (assoc 10 (entget obj)))
  34.                      o11 (cdr (assoc 11 (entget obj)))
  35.                )
  36.                (cond ((equal (car o10) (car o11) 0.01)
  37.                       (ssadd obj objy)
  38.                       (if (or (null minx-v)
  39.                               (and minx-v (> minx-v (car o10)))
  40.                           )
  41.                         (setq minx-v (car o10)
  42.                               vtk    obj
  43.                         )
  44.                       )
  45.                      )
  46.                      ((equal (cadr o10) (cadr o11) 0.01)
  47.                       (ssadd obj objx)
  48.                       (if (or (null maxy-h)
  49.                               (and maxy-h (< maxy-h (cadr o10)))
  50.                           )
  51.                         (setq maxy-h (cadr o10)
  52.                               top    obj
  53.                         )
  54.                       )
  55.                       (if (or (null miny-h)
  56.                               (and miny-h (> miny-h (cadr o10)))
  57.                           )
  58.                         (setq miny-h (cadr o10)
  59.                               hor    obj
  60.                         )
  61.                       )
  62.                      )
  63.                )
  64.               )
  65.         )
  66.       )
  67.       (if (= (type hor) (type vtk) 'ename)
  68.         (progn
  69.           (setq        s10 (cdr (assoc 10 (entget hor)))
  70.                 s11 (cdr (assoc 11 (entget hor)))
  71.           )
  72.           (if (> (car s10) (car s11))
  73.             (setq miny-h s11)
  74.             (setq miny-h s10)
  75.           )
  76.           (setq        s10 (cdr (assoc 10 (entget vtk)))
  77.                 s11 (cdr (assoc 11 (entget vtk)))
  78.           )
  79.           (if (> (cadr s10) (cadr s11))
  80.             (setq minx-v s11)
  81.             (setq minx-v s10)
  82.           )
  83.           (setvar "osmode" 0)
  84.           (command "_.Move" objx "" miny-h minx-v)
  85.           (setq        vtk    (entget vtk)
  86.                 maxy-h (list (car minx-v)
  87.                              (cadr (cdr (assoc 10 (entget top))))
  88.                        )
  89.                 vtk    (subst (cons 10 minx-v) (assoc 10 vtk) vtk)
  90.                 vtk    (subst (cons 11 maxy-h) (assoc 11 vtk) vtk)
  91.           )
  92.           (entmod vtk)
  93.           (command "_.Move"
  94.                    objx
  95.                    objy
  96.                    ""
  97.                    minx-v
  98.                    (polar minx-v
  99.                           (angle minx-v miny-h)
  100.                           (* 0.5 (distance minx-v miny-h))
  101.                    )
  102.           )
  103.         )
  104.       )
  105.     )
  106.   )
  107.   (setvar "osmode" osm)
  108.   (princ)
  109. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-7-26 12:25:57 | 显示全部楼层
楼主啊!能否直接做成一个文件让我调用!这样我不会用哦!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

使用道具 举报

发表于 2004-7-26 14:44:49 | 显示全部楼层
最初由 mmmm 发布
[B]下载文件 [/B]


楼主太厉害了,这个程序也能想到并利于程序解决它。虽然现在我一般是用其他的二次软件进行EXCEL->CAD,但对于没有软件的朋友还是不错的选择!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-7-26 15:45:07 | 显示全部楼层
最初由 mmmm 发布
[B]下载文件 [/B]

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

使用道具 举报

发表于 2004-7-26 16:28:41 | 显示全部楼层
最初由 andyhua5240 发布
[B]
下载用了,楼主的程序很实用也好用,谢谢!
唉,在2004中试了一下,不行,狂晕! [/B]


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

使用道具 举报

发表于 2004-7-26 17:07:45 | 显示全部楼层
楼主是不是选择的是AUTOCAD图元呀,我的确实不行!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-7-26 17:36:59 | 显示全部楼层
最初由 andyhua5240 发布
[B]楼主是不是选择的是AUTOCAD图元呀,我的确实不行! [/B]


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

使用道具 举报

发表于 2004-7-26 18:12:42 | 显示全部楼层
不知道在哪里选呀?
设置了细线也不行呀?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-7-26 20:50:29 | 显示全部楼层
参考一下我这里写的说明
http://www.xdcad.net/forum/showt ... pagenumber=1&s=
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-7-27 10:10:41 | 显示全部楼层
还是不行,试了好多次了,表格细我都选了最细的象虚线的线还是不行!
紧急救助呀!
谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-7-27 20:02:27 | 显示全部楼层
你的Excel表格粘贴入AutoCAD后数据类型对吗?
你点取LIST一下,是POLYLINE和TEXT吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-27 08:31 , Processed in 0.220724 second(s), 61 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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