找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1128|回复: 13

[求助] [求助]:如何将线的起点变成端点?

[复制链接]

已领礼包: 25个

财富等级: 恭喜发财

发表于 2005-10-24 10:35:17 | 显示全部楼层 |阅读模式

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

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

×
小弟用lisp作了一些简单的画线程序, 对现有的线起点一定距离画线., 发现需要把某些线的起点变成端点, 如何用lisp实现呢?
请各位高手指点
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-10-24 18:02:57 | 显示全部楼层
如果是polyline线的话你可以将它的各坐标叠加出来,然后用revser(表反向)再用entmake重生成
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 25个

财富等级: 恭喜发财

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

使用道具 举报

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

使用道具 举报

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

  14. ;;将线的起点变成终点
  15. (defun c:test ()
  16.   (CMDLA0)
  17.   (setq        ss (ssget '((0 . "LINE")))
  18.         i  -1
  19.   )
  20.   (while (setq s1 (ssname ss (setq i (1+ i))))
  21.     (setq pt10 (ddxf 10 s1)
  22.           pt11 (ddxf 11 s1)
  23.     )
  24.     (sub_upd s1 10 pt11)
  25.     (sub_upd s1 11 pt10)
  26.   )
  27.   (CMDLA1)
  28. )[/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 25个

财富等级: 恭喜发财

 楼主| 发表于 2005-10-31 15:26:58 | 显示全部楼层
斑竹先生你好!
      我用上面的代码, 没有实现"线"的"起点 '和"终点"的交换.
请指教??
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-11-14 23:54:39 | 显示全部楼层
最初由 sujia 发布
[B]斑竹先生你好!
      我用上面的代码, 没有实现"线"的"起点 '和"终点"的交换.
请指教?? [/B]
  1. [FONT=courier new];;将线的起点变成终点
  2. (load"xyp_lib.vlx")
  3. (defun c:test ()
  4.   (CMDLA0)
  5.   (setq        ss (ssget '((0 . "LINE")))
  6.         i  -1
  7.   )
  8.   (while (setq s1 (ssname ss (setq i (1+ i))))
  9.     (setq pt10 (cdr(assoc 10 (entget s1)))
  10.           pt11 (cdr(assoc 11 (entget s1)))
  11.     )
  12.     (sub_upd s1 10 pt11)
  13.     (sub_upd s1 11 pt10)
  14.   )
  15.   (CMDLA1)
  16. )[/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-11-15 08:24:27 | 显示全部楼层
把直线变为多义线。再用多义线线形转向功能。地鼠工具箱里都收录有。你下了。再研究下源码就行。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-11-15 08:39:29 | 显示全部楼层
最初由 地鼠 发布
[B]把直线变为多义线。再用多义线线形转向功能。地鼠工具箱里都收录有。你下了。再研究下源码就行。 [/B]

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

使用道具 举报

发表于 2005-11-15 09:10:42 | 显示全部楼层
我这里有一个以前做的改线方向程序,是用纯LISP写的,没有使用任何外部函数,但只对LWPOLYLINE线进行操作,你可以参考?
;;====================================================================
;;        改复线方向
;;====================================================================
(defun  c:C_Dir (/ Ss n i Ns ent Os Ps Rs Ts)        ;        22:23 2001-03-18
        (prompt "\n ***** 改复线方向 *****  22:23 2001-03-18")
        (setvar "CMDECHO" 0)                        ; 执行过程没有回应

        (prompt "\n 选择一组对象:")                ; 选择需要改方向对象
        (setq ss (ssget))                        ; 选择对象
        (setq Ns (sslength ss))                        ; 对象数
        (setq i 0     N 0)
;---------------------------------------------------------------
        (repeat Ns                        ;        对n个对象进行修改
          (setq    ent (entget(ssname ss i ))    i (+ i 1))
;;          ( print ent )                ; 显示当前表?<--------------
          (if (= "LWPOLYLINE" (cdr (assoc 0 ent))) ; 取对象名,判断该对象是否是 LWPOLYLINE
          (Progn                                        ; AutoCad R14 以上版本格式的复线
             ;;--------------------------------------------------------
             ( setq Ns (cdr (assoc 90 ent )))        ; 取每条线的总点数
             ;;--------------------------------------------------------
             ( setq Os (assoc 10 ent)        Ts 5   N (+ N 1))        ; 取第一点子表
             (while (/= Os (nth Ts ent))  (setq Ts(+ Ts 1)) ); 确定第一点子表位置
             ( setq Ps (+ Ts (* Ns 4))  Ps (- Ps 4))        ; 定位到最后一个子表
             ( setq Ns (/ Ns 2) )        ; 总节点数折半
             ;;----------------------------------------
             (repeat Ns
                ( setq Os (nth Ts ent))                        ; 由前向后取每一点的子表
                ( setq Rs (nth Ps ent))                        ; 由后向前取每一点的子表
                ( setq ent (subst '(120 0 0) Os ent))        ;改新参数
                ( setq ent (subst Os Rs ent))                ;改新参数
                ( setq ent (subst Rs '(120 0 0) ent))        ;改新参数
                ( setq Ts (+ Ts 4)  Ps (- Ps 4)  )        ; 定位下一个节点对
             ) ; repeat Ns
             (entmod ent)        ;;(entupd ent)                ; 更新对象
          ) ; Progn
          ) ; If
        ) ; repeat n
        (setvar "CMDECHO" 1)
        (setq n n)  
) ;;  C_Directioal 方向
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 25个

财富等级: 恭喜发财

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

使用道具 举报

发表于 2005-11-22 17:50:35 | 显示全部楼层
最初由 WHGF 发布
[B]我这里有一个以前做的改线方向程序,是用纯LISP写的,没有使用任何外部函数,但只对LWPOLYLINE线进行操作,你可以参考?
;;====================================================================
;;        改复线方向
... [/B]

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

使用道具 举报

已领礼包: 25个

财富等级: 恭喜发财

 楼主| 发表于 2005-11-24 11:09:24 | 显示全部楼层
小弟用笨办法做了一个,请各位高手指教


(defun c:xfx ( / con1 con2 curve no i f1
              coor lc f_points ic
              il   pt);;3复合线该方向
(setq con1 (getvar "cmdecho"))
(setq con2 (getvar "osmode" ))
(setvar "cmdecho" 0)
(setvar "osmode"  0)
(command "ucs" "w")
(command ".undo" "be")
(vl-load-com)
(graphscr)
(princ "\n 选取要反向的曲线:")
  (setq curve (ssget))
  (setq no (sslength curve))
  (setq i 0)
(repeat no
(setq f1 (vlax-ename->vla-object (ssname curve i)))
(setq coor (vlax-get f1 'Coordinates))
(setq lc  (length coor))
(setq f_points nil)
  (setq ic 0)
  (repeat (/ lc 3)
    (setq point (list (nth (+ ic 0) coor)
                      (nth (+ ic 1) coor)
                      (nth (+ ic 2) coor)
                 )
    )
    (setq ic (+ ic 3))
    (setq f_points (append f_points (list point)))
  )
(setq f_points (reverse f_points))
(setq il 0)
(command "3dpoly")
(repeat (/ lc 3)
(setq pt (nth il f_points))
(setq il (+ il 1))
(command pt)
)
(command "")

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

使用道具 举报

发表于 2005-11-24 16:02:53 | 显示全部楼层
TO 狂刀
用的早,但不精,只用CAD做矢量化工作。最近常在这里转,从你和各位版主、从多高手们学到很多东西。往后有困难还要经常请教。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-28 22:12 , Processed in 0.343081 second(s), 56 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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