找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1227|回复: 13

[求助] [求助]:如何把多条直线按指定的距离在线段两端缩短或者加长

[复制链接]
发表于 2005-10-20 16:13:19 | 显示全部楼层 |阅读模式

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

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

×
如何把一次选择的多条直线按指定的距离在线段两端缩短或者加长,望高手指点。。谢谢~~
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-10-20 16:28:48 | 显示全部楼层
只能通过程序解决!手工太慢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-10-20 17:19:29 | 显示全部楼层
  1. [FONT=courier new](load "xyp_lib")
  2. ;|加载通用函数(可在签名栏直接下载)
  3. 如果已经下载xyp_lib并放到搜索路径下可以不再下载!
  4. 利用以下任何一种方式(首选第一种)即可加载和运行通用函数内的所有子程序:
  5. ★1·在acad.lsp中增加(load"xyp_lib")
  6. ■2·在每个程序内增加(load"xyp_lib")
  7. ■3·在command下,输入(load"xyp_lib")
  8. ■4·在菜单.mnl中增加(load"xyp_lib")
  9. ■5·将xyp_lib.vlx文件直接拽到cad屏幕
  10. ★通用函数下载地址:
  11. [url]http://www.xdcad.net/forum/attachme...&postid=1606661[/url]
  12. [url]http://www.mjtd.com/bbs/dispbbs.asp...ID=37554&page=1[/url]|;

  13. ;把多条直线按指定的距离在线段两端缩短或者加长
  14. (defun c:test ()
  15.   (CMDLA0)
  16.   (setq        no1 (UREAL 1 "" "\n两端各增减的距离" no1)
  17.         ss  (ssget '((0 . "LINE")))
  18.         i   -1
  19.   )
  20.   (while (setq s1 (ssname ss (setq i (1+ i))))
  21.     (setq pts          (dxf 10 (entget s1))
  22.           pte          (dxf 11 (entget s1))
  23.           ang          (angle pts pte)
  24.           pts-new (polar pts ang (* no1 -1.0))
  25.           pte-new (polar pte ang (* no1 1.0))
  26.     )
  27.     (sub_upd s1 10 pts-new)
  28.     (sub_upd s1 11 pte-new)
  29.   )
  30.   (CMDLA1)
  31. )[/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 12个

财富等级: 恭喜发财

发表于 2005-10-20 21:54:54 | 显示全部楼层

Re: [求助]:如何把多条直线按指定的距离在线段两端缩短或者加长

最初由 118_lj 发布
[B]如何把一次选择的多条直线按指定的距离在线段两端缩短或者加长,望高手指点。。谢谢~~ [/B]


[php]
(defun c:de( / ss i ent spt ept 1st 2st dz st)
  (setq ss (ssget '((0 . "*LINE,ARC"))))
  (IF (NOT S)
    (SETQ S 2)
  )
  (SETQ dz S)
  (SETQ ST (RTOS dz 2 4))
  (INITGET 2)
  (PRINC "\n请输入增量值:<")
  (PRINC ST)
  (PRINC ">:")
  (SETQ dz (GETREAL))
  (IF (NOT dz)
    (SETQ dz S)
  )
  (SETQ S dz)
  (setq i 0)
  (repeat (sslength ss)
    (setq ent (ssname ss i))
    (setq spt (vlax-curve-getstartpoint ent))
    (setq ept (vlax-curve-getendpoint ent))
    (setq 1st (list ent spt))
    (setq 2st (list ent ept))
    (command "LENGTHEN" "DE" dz 1st 2st "")
    (setq i (1+ i))
  )
  (princ)
)[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2005-10-21 11:45:43 | 显示全部楼层
!!! 支持所有曲线:

  1. ;; dlen = 双向伸缩曲线长度v1.1---狂刀2005.3.25 ok!.
  2. (defun c:dlen (/ d i ss e lst1 lst2)
  3.   (vl-cmdf ".undo" "be")
  4.   (initget 128)
  5.   (if (and (setq d (getdist "\n 输入双向伸缩长度(负数为缩短):")
  6.                  i -1
  7.            )
  8.            (setq ss (ssget '((0 . "LINE,ARC,ELLIPSE,*POLYLINE,SPLINE"))))
  9.       )
  10.     (while (setq e (ssname ss (setq i (1+ i))))
  11.       (setq lst1 (list e (vlax-curve-getstartpoint e))
  12.             lst2 (list e (vlax-curve-getendpoint e))
  13.       )
  14.       (vl-cmdf ".LENGTHEN" "de" d lst1 lst2 "")
  15.     )
  16.   )
  17.   (vl-cmdf ".undo" "e")
  18.   (princ)
  19. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 25个

财富等级: 恭喜发财

发表于 2005-10-21 11:50:17 | 显示全部楼层
如果需要只在一端(注意不是双向啊)缩短或者加长怎么办呢?

前提是批量的线,  伸长端为靠近选择端,选择方式自动为"F"画线选择
望高手指点。。谢谢~~
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2005-10-22 16:16:46 | 显示全部楼层
最初由 狂刀 发布
[B]!!! 支持所有曲线:
[code]
;; dlen = 双向伸缩曲线长度v1.1---狂刀2005.3.25 ok!.
(defun c:dlen (/ d i ss e lst1 lst2)
  (vl-cmdf ".undo" "be")
  (initget 128)
  (if (and (setq d (getdist "\n 输入双?.. [/B]

SPLINE线→“无法拉长此对象。”

楼上程序修改(未考虑伸长时的“长度无效”情况)。
双向伸缩曲线长度,不能伸缩的则亮显。
[php]
;;;双向伸缩曲线长度,不能伸缩的则亮显。
(defun c:test245 ()
  (cmdla0)
  (setq        no1 (UREAL 1 "" "\n输入双向伸缩长度(负数为缩短) : " no1)
        ss  (ssget '((0 . "LINE,ARC,ELLIPSE,*POLYLINE,SPLINE")))
        i   -1
  )
  (while (setq s1 (ssname ss (setq i (1+ i))))
    (if        (or (> no1 0)
            (> (vlax-curve-getDistAtParam
                 s1
                 (vlax-curve-getEndParam s1)
               )
               (* no1 -2.0)
            )
        )
      (progn
                                ;29246.0;14829.1093
        (setq sel1  (list s1 (vlax-curve-getstartpoint s1))
              sel2  (list s1 (vlax-curve-getendpoint s1))
              leng1 (vlax-curve-getDistAtParam
                      s1
                      (vlax-curve-getEndParam s1)
                    )
        )
        (command "LENGTHEN" "de" no1 sel1 sel2 "")
        (setq leng2 (vlax-curve-getDistAtParam
                      s1
                      (vlax-curve-getEndParam s1)
                    )
        )
        (if (= leng1 leng2)
          (redraw s1 3)
        )
      )
      (redraw s1 3)
    )
  )
  (cmdla1)
)
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-10-22 17:46:20 | 显示全部楼层
SPLINE线 由于自身原因不能伸长(其实也不是不能啦,只是不能按数学模型伸长,但是可以沿着端点切线伸长),但是却可以缩短.
(if    (or (> no1 0)
        (> (vlax-curve-getDistAtParam
         s1
         (vlax-curve-getEndParam s1)
           )
           (* no1 -2.0)
        )
    )

作判断我觉得可以两说.不能延伸或缩短的,cad给出提示也没有什么不好.
如果没有提示,以为已经缩短或伸长了,其实没有,尤其在对选集操作的时候,不容易发现.反而不好

顺便发一个函数
.

  1.   [FONT=courier new]
  2. ;| extspl = spline 双向伸长ok!--by 狂刀.2005.10
  3. 返回: 修改后的实体,实体名ename.
  4. 说明: 本函数仅仅对非拟合的spline有效!,即:没有offset的spline.
  5. 实例:
  6. c:extspl
  7.   [/FONT]
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2005-11-17 18:14:15 | 显示全部楼层
两位编程高手都很厉害。
佩服狂刀和xyp。
收不收徒弟呢。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-9-25 15:36:20 | 显示全部楼层
能不能在原来的端点处设置断点啊
两端伸长以后变为3条线段,
增加这样一个选项
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-9-25 20:12:28 | 显示全部楼层
今天刚好碰到这个问题,正是时候哟,我想把太短的等高线(已拟合的多段线)拉长可以吧?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-18 08:47 , Processed in 0.446023 second(s), 56 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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