找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 718|回复: 7

[编程申请]:交换LINE两个端点的坐标

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

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

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

×
求第一个LSP程序(能框选多选),这一程序在CAD中进行向量计算的时候非常有用:
每条LINE线有两个端点P1(x1,y1)与p2(x2,y2)
1、对与Y轴不平行(即x1≠x2)的LINE线,若x1>x2,则交换两个端点的坐标变成P1(x2,y2)与P2(x1,y1),否则不交换;
2、对与Y轴平行(即x1=x2)的LINE线,若y1 < y2,则交换两个端点的坐标变成P1(x2,y2)与P2(x1,y1),否则不交换;


求第二个LSP程序(能框选多选),这一程序同样在CAD中进行向量计算的时候非常有用:无条件则交换LINE线两个端点的坐标P1(x2,y2)与P2(x1,y1)成P1(x2,y2)与P2(x1,y1)。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 593个

财富等级: 财运亨通

发表于 2005-7-30 17:16:38 | 显示全部楼层

  1. (defun c:tt (/ ss n el sp ep x1 x2 y1 y2 l1 l2)
  2.   (if (setq ss (ssget '((0 . "line"))))
  3.     (progn
  4.       (setq n -1)
  5.       (repeat (sslength ss)
  6.         (setq el (entget (ssname ss (setq n (1+ n))))
  7.               sp (cdr (setq l1 (assoc 10 el)))
  8.               ep (cdr (setq l2 (assoc 11 el)))
  9.               x1 (car sp)
  10.               y1 (cadr sp)
  11.               x2 (car ep)
  12.               y2 (cadr ep)
  13.         )
  14.         (if
  15.           (or (and (equal x1 x2)
  16.                    (< y1 y2)
  17.               )
  18.               (and (/= x1 x2) (> x1 x2))
  19.           )
  20.            (entmod (subst (cons 10 ep) l1 (subst (cons 11 sp) l2 el)))
  21.         )
  22.       )
  23.     )
  24.   )
  25.   (princ)
  26. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2005-7-30 21:16:45 | 显示全部楼层
  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. [COLOR=red] ★通用函数下载地址:[/COLOR][url]http://www.xdcad.net/forum/attachment.php?s=&postid=1606661[/url]|;

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

使用道具 举报

发表于 2005-7-30 22:03:05 | 显示全部楼层
xyp没有看明白他的意思,他说的是始终第一点为左边的点,第二点为右边的点,你的命令只是简单的换了一下直线的起点和终点,我说的情况是直线的斜率不为零的情况
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2005-7-30 23:27:27 | 显示全部楼层
  1. //xbbcad
  2. ;DDL: Copyright By WWZ,2003-12-3
  3. ;颠倒直线的两端点,即交换实体对象组代码10和11,
  4. ;用于解决直线、dimension、多段线的线型换向问题

  5. (defun C:ddl(/ tmp ed ent m n endpt1 endpt2 newline name)
  6. (princ "\n交换直线、多段线或标注的起点和终点.请选择直线、多段线或标注:\n")   
  7. ;选择直线或标注,注意逻辑组的使用
  8. (setq tmp (ssget (list (cons -4 "<OR")(cons 0 "LINE") (cons 0 "LWPOLYLINE") (cons 0 "DIMENSION") (cons -4 "or>"))))
  9. (if tmp
  10.    (progn
  11.      (setq n (sslength tmp) m 0)
  12.      (repeat n
  13.          (setq ent (ssname tmp m))
  14.          (setq ed  (entget ent))      
  15.          ;(ts "\nent=")
  16.          ;(ts ent)
  17.          (setq name (cdr (assoc 0 ed)))
  18.          (if (= name "LWPOLYLINE")
  19.            (lwpolyline_reverse ent ed)
  20.            (progn               
  21.              (setq endpt1 (cons 11 (cdr (assoc 10 ed) )))         
  22.              (setq endpt2 (cons 10 (cdr (assoc 11  ed) )))                  
  23.              (setq ed (subst endpt1 (assoc 11 ed) ed))   
  24.              (setq ed (subst endpt2 (assoc 10 ed) ed))
  25.              (setq newline ed)
  26.              ;删除原对象并生成相同句柄的新对象,注意:
  27.              ;enddel 对象名称ent不是对象数据表ed
  28.              ;endmod entmake 的不是对象名称ent是对象数据表ed
  29.              (entdel  ent)
  30.              (entmake newline)                          
  31.           )
  32.          );end if   
  33.          (setq m (1+ m))
  34.      );end repeat
  35.    )
  36. );end if tmp
  37. (princ "\n共处理了")
  38. (if m (princ m) (princ "0"))
  39. (princ "条直线(多段线、标注)。")
  40. (princ)
  41.   
  42. );end C:ddl

  43. ;---------------------------------------------------------------------------
  44. ;多段线的换向程序,修改自明经通道
  45. (DEFUN lwpolyline_reverse (lwpent data / num data one points tempnum tempent)
  46.   
  47.        (SETQ points nil)
  48.        (FOREACH one data
  49.             (PROGN (IF (= (CAR one) 10)
  50.                        (SETQ points (APPEND points (LIST one)))
  51.                    )
  52.             )
  53.         )
  54.         
  55.         (SETQ points (REVERSE points))
  56.         (SETQ tempnum 0)
  57.         (SETQ tempent nil)
  58.         
  59.         (FOREACH one data
  60.             (PROGN (IF (= (CAR one) 10)
  61.                        (SETQ tempent (APPEND tempent (LIST (NTH tempnum points)))
  62.                              tempnum (1+ tempnum)
  63.                        )
  64.                        (SETQ tempent (APPEND tempent (LIST one)))
  65.                    )
  66.             )
  67.         )      
  68.         (entdel  lwpent)
  69.         (entmake tempent)
  70.         
  71.         (PRINC)
  72. );end lwpolyline_reverse
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-22 10:05 , Processed in 0.185896 second(s), 46 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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