找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1293|回复: 7

[讨论]:直线两端缩短

[复制链接]
发表于 2005-4-2 15:36:19 | 显示全部楼层 |阅读模式

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

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

×
我的一个lisp程序,不知道对大家有用否

功能:对选中的直线两端同时缩短一定的长度


[PHP]
(defun c:lc (/              osm      bli        cmd         CutLength
             en              loop     en1        en1_data EntityType
             p1              p2       x        y         z          MidPoint
             dist     ScaleFactor        width
            )


  (setq osm (getvar "osmode"))
  (setq bli (getvar "blipmode"))
  (setq cmd (getvar "cmdecho"))


  (setvar "blipmode" 0)
  (setvar "cmdecho" 0)
  (setq CutLength (getreal "\nSpecify cut length <150>:"))
  (if (null CutLength)
    (setq CutLength 150.0)
  )                                       

;;;in the following, entity loop is cutted
  (setq en (ssget))
  (setq loop 0)
  (repeat (sslength en)
    (setq en1 (ssname en loop))
    (setq en1_data (entget en1))
    (setq EntityType (cdr (assoc 0. en1_data)))
    (if        (= EntityType "LINE")        ;entity type of line is cutted
      (progn
        (setq p1 (cdr (assoc 10 en1_data)))
        (setq p2 (cdr (assoc 11 en1_data)))
        (setq x (/ (+ (car p1) (car p2)) 2.0))
        (setq y (/ (+ (cadr p1) (cadr p2)) 2.0))
        (setq z (/ (+ (caddr p1) (caddr p2)) 2.0))
        (setq MidPoint (list x y z))
        (setq dist (distance p1 p2))
        (setq ScaleFactor (/ (- dist (* CutLength 2.0)) dist))
        (setvar "osmode" 0)
        (command "scale" en1 "" MidPoint ScaleFactor "")
        (setvar "osmode" osm)
      )
    )
    (if        (= EntityType "LWPOLYLINE")  ;entity type of pline is cutted
      (progn
        (setq en1_data (entget en1))
        (setq width (cdr (assoc 43 en1_data)))
        (command "explode" en1 "")
        (setq en1 (entlast))
        (setq en1_data (entget en1))
        (setq p1 (cdr (assoc 10 en1_data)))
        (setq p2 (cdr (assoc 11 en1_data)))
        (setq x (/ (+ (car p1) (car p2)) 2.0))
        (setq y (/ (+ (cadr p1) (cadr p2)) 2.0))
        (setq z (/ (+ (caddr p1) (caddr p2)) 2.0))
        (setq MidPoint (list x y z))
        (setq dist (distance p1 p2))
        (setq ScaleFactor (/ (- dist (* CutLength 2.0)) dist))
        (setvar "osmode" 0)
        (command "scale" en1 "" MidPoint ScaleFactor "")
        (command "pedit" en1 "" "w" width "")
        (setvar "osmode" osm)
      )
    )
    (setq loop (+ loop 1))
  )                                        ;repeat


  (setvar "osmode" osm)
  (setvar "blipmode" bli)
  (setvar "cmdecho" cmd)
  (princ)
)
[/PHP]


需要解决的问题:
1 调用程序后,不是正常退出,出现“ Unknown command "LC"  ”的字样,不知如何解决
2 若选取了多根线段执行命令后,不能用 undo  返回到上一部,主要是lisp中执行了很多小步骤
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-4-2 22:38:18 | 显示全部楼层
[php]
;;;加载通用函数
;;;下载:http://www.xdcad.net/forum/showthread.php?s=&threadid=325268
(load "xyp_lib")

;;;直线两端缩短
(defun c:test ()
  (cmdla0)
  (setq #dist (ureal 1 "" "\n两端缩短距离" #dist))
  (setq SS (ssget '((0 . "LINE")))
        i -1)
  (command ".undo" "BE")
  (while (setq s1 (ssname ss (setq i (1+ i))))   
    (setq e (entget s1)
      pt1 (dxf 10 e)
          pt2(dxf 11 e)
          dist(abs(distance pt1 pt2))
          ang(angle pt1 pt2)
          la (dxf 8 e)
    )
    (if (> dist (* #dist 2))
      (progn
        (setq pt3 (polar pt1 ang #dist)
              pt4 (polar pt2 ang (* #dist -1.0))
              )
        (mkla1 la)
        (command"erase" s1 "" "line" pt3 pt4 "")       
        )
      )
    )
  (command ".undo" "E")
  (cmdla1)
)
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2005-4-3 06:43:26 | 显示全部楼层
最初由 狂刀 发布
[B]use "lengthen" in the lisp will support all type of curve [/B]


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

使用道具 举报

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

使用道具 举报

发表于 2005-4-3 14:17:14 | 显示全部楼层
最初由 ljpnb 发布
[B]

要除了"spline"线之外 [/B]


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

使用道具 举报

发表于 2005-4-3 18:25:54 | 显示全部楼层
这个程序用处漫大的.
不知道能把射线改为短直线吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-4-3 20:09:47 | 显示全部楼层
最初由 狂刀 发布
[B]

错!!!
spline不能伸长,但绝对可以缩短! [/B]


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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-28 02:27 , Processed in 0.181869 second(s), 46 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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