找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 951|回复: 9

[日积月累]:调整直线为水平垂直!!

[复制链接]

已领礼包: 593个

财富等级: 财运亨通

发表于 2004-6-24 11:35:08 | 显示全部楼层 |阅读模式

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

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

×

  1. ;调整直线为水平垂直
  2. (defun c:test (/ ss ssl e sp elst ep v)
  3.   (if (setq ss (ssget ":L" '((0 . "line"))))
  4.     (progn
  5.       (setq ssl (sslength ss))
  6.       (while (> ssl 0)
  7.         (setq e           (ssname ss (setq ssl (1- ssl)))
  8.               elst (entget e)
  9.         )
  10.         (setq sp (vlax-curve-getstartpoint e)
  11.               ep (vlax-curve-getendpoint e)
  12.               v         (mapcar 'abs (mapcar '- sp ep))
  13.         )
  14.         (if (not (equal v '(0. 0. 0.) 1e-5))
  15.           (progn
  16.             (if        (> (cadr v) (car v))        ; 竖线
  17.               (if (> (cadr sp) (cadr ep))
  18.                 (setq
  19.                   elst (subst (cons 11 (list (car sp) (cadr ep) 0.))
  20.                               (assoc 11 elst)
  21.                               elst
  22.                        )
  23.                 )
  24.                 (setq
  25.                   elst (subst (cons 10 (list (car ep) (cadr sp) 0.))
  26.                               (assoc 10 elst)
  27.                               elst
  28.                        )
  29.                 )
  30.               );if
  31.               (if (> (car sp) (car ep))        ; 竖线
  32.                 (setq
  33.                   elst (subst (cons 10 (list (car sp) (cadr ep) 0.))
  34.                               (assoc 10 elst)
  35.                               elst
  36.                        )
  37.                 )
  38.                 (setq
  39.                   elst (subst (cons 11 (list (car ep) (cadr sp) 0.))
  40.                               (assoc 11 elst)
  41.                               elst
  42.                        )
  43.                 )
  44.               );if
  45.             );if
  46.             (entmod elst)
  47.           );progn
  48.         )                                ;if
  49.       )                                        ;while
  50.     )
  51.   )
  52.   (princ)
  53. )

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-6-24 13:46:25 | 显示全部楼层
为什么不能就以dxf10为准来处理?
实际画图中,真正准确的点可能是起始点,也可能是终点,这么处理后也无法确保调整后就一定是我们希望的点。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2004-6-24 14:09:48 | 显示全部楼层
最初由 陌生人 发布
[B]为什么不能就以dxf10为准来处理?
实际画图中,真正准确的点可能是起始点,也可能是终点,这么处理后也无法确保调整后就一定是我们希望的点。 [/B]

这个程序是调整一个表格的时候临时写的,只为完成一个功能,谈不上完善。水平线以左边为基准,竖线以上面为基准。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-25 07:40:57 | 显示全部楼层
这个程序我想是用来修正那些有轻微偏差的准水平或者准垂直线,因此用那边当基准点,对图形的影响都不大。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2004-6-25 10:44:32 | 显示全部楼层
我试了一下,提点建议。
最好能够提示输入一个角度,和水平垂直相差在这个之内的直线,归于水平垂直,其他的不变。
比如输入 5 ,则 0 加减 5 之间的归于水平,则 90 加减 5 之间的归于垂直。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2004-6-25 12:54:32 | 显示全部楼层
最初由 陌生人 发布
[B]和我想的一样,我写了一个,不过现在不在家。:s [/B]

期待你的完整程序,我是就事写的不考虑那么多。在发一个日积月累

  1. (defun test (lay /)
  2.   (vlax-map-collection
  3.     (vlax-get (vlax-get (vlax-get-acad-object) 'activedocument)
  4.               'blocks
  5.     )
  6.     '(lambda (i)
  7.        (vlax-map-collection
  8.          i
  9.          '(lambda (x) (vla-put-layer x lay))
  10.        )
  11.      )
  12.   )
  13.   (princ)
  14. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-25 21:59:58 | 显示全部楼层
我觉得还是加一个基准点来调整比较好,比如点取实体时最近一个端点或交点为基准点!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-26 01:22:25 | 显示全部楼层
回楼上:很多时候是取选集而不是点选.
回应ea斑竹,发一个支持角度容差的.

  1. ;hvline = 自动调整水平垂直.------------------陌生人.2004.6
  2. ;******主测程序******
  3. (defun c:hvline (/ i li ang)
  4.   (vl-cmdf ".undo" "be")
  5.   (setq ang (getdist "\n容差度数:"))
  6.   (while (progn (princ "\n选择需要调整水平垂直的直线/<退出>:")(setq ss (ssget ":L" '((0 . "LINE")))))
  7.     (setq i -1)
  8.     (while (setq li (ssname ss (setq i (1+ i))))
  9.       (xli-hv li (* (/ ang 180) PI)) ;1度.
  10.     )
  11.   )
  12.   (vl-cmdf ".undo" "e")
  13.   (princ)
  14. )
  15. ;********* (xli-hv) 核心函数 ********
  16. ;v1.1,按angf角度容差处理.调整均以起始点dxf10为准.
  17. (defun xli-hv (li angf / sp ep ang lst ent)
  18.   (setq sp (vlax-curve-getstartpoint li)
  19.         ep (vlax-curve-getendpoint li)
  20.         ang (angle sp ep))
  21.   (cond
  22.     ((or (equal ang 0 angf)(equal ang (* 2 PI) angf)(equal ang PI angf)) ;基本水平.
  23.      (setq lst (list (car ep)(cadr sp)(caddr sp))))
  24.     ((or (equal ang (* 0.5 PI) angf)(equal ang (* 1.5 PI) angf)) ;基本垂直(水平已经过滤).
  25.      (setq lst (list (car sp)(cadr ep)(caddr sp))))
  26.   )
  27.   (if lst
  28.       (progn (setq ent (entget li))
  29.         (entmod (subst (cons 11 lst)(assoc 11 ent)ent))
  30.       )
  31.   )(princ)
  32. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-27 08:22 , Processed in 0.194772 second(s), 50 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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