找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1244|回复: 12

[求助]:关于线的打断break问题,大家帮帮忙!

[复制链接]
发表于 2006-1-9 14:42:09 | 显示全部楼层 |阅读模式

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

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

×
我有一个想法,选取一条直线后,通过输入平分的段数,通过divide操作后,获取平分点的坐标
,然后根据输入的距离,再线上的平分点左右得到另外两个点,这样再通过break断开这两点间距离。。。不知道说清楚没有,呵呵,下面我编了点,可是到break的时候就出错了。大家帮我看看吧。。谢谢~~~~
(defun c:bre ()
  (setq ent (entsel "select the Line you need:"))
  (setq ent0 (car ent))
  (setq data (entget ent0))
  (setq etype (cdr (assoc 0 data)))
  (if (/= etype "LINE")
    (progn
      (prompt "The entity is not 'LINE' ")
      (exit)
    )
  )
  (setq spnt (assoc 10 data))
  (setq epnt (assoc 11 data))
  (setq langle (getangle "Input lines' Angel:"))
  (setq vpnt (getint "Input the number of bridge:"))
  (setq dis (getint "Input the distance of bridge:"))
  (setq vn (+ 1 vpnt))
  (command "_.divide" ent vn)
  (setvar "osmode" 0)
  (setq psele (ssget "p"))
  (setq i 0)
  (while (< i vpnt)
    (setq e (ssname psele i))
    (setq spdat (cdr (assoc 10 (entget e))))
    (setq epdat1 (polar spdat langle (/ dis 2)))
    (setq epdat2 (polar spdat (+ pi langle) (/ dis 2)))
    (command "_.break" (list ent epdat1) "f" epdat1 epdat2)
    (setq ent (entlast))
    (setq i (+ i 1))
  )
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 593个

财富等级: 财运亨通

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

使用道具 举报

 楼主| 发表于 2006-1-10 09:25:23 | 显示全部楼层
能帮我稍微写点么。。。

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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2006-1-10 14:33:54 | 显示全部楼层
控制分段数不如用保留线长和间隙来定。下面是按楼主的意思修改的。更好的方法是设定了线长和间隙后选择要处理的线一次处理选择集。

  1. (defun c:bre (/ ent el sp ep l an n d v v1 pts)
  2.   (while (and (setq ent (car (entsel "\nselect the Line you need:")))
  3.               (setq el (entget ent))
  4.               (= (cdr (assoc 0 el)) "LINE")
  5.               (setq num (getint "\nInput the number of bridge:"))
  6.               (setq dis        (getdist (setq sp (cdr (assoc 10 el)))
  7.                                  "\nGet distance of space: "
  8.                         )
  9.               )
  10.          )
  11.     (setq ep  (cdr (assoc 11 el))
  12.           l   (distance sp ep)
  13.           an  (angle sp ep)
  14.           d   (/ l num)
  15.           v1  (polar '(0. 0. 0.) (+ an pi) dis)
  16.           pts (list sp)
  17.     )
  18.     (entdel ent)
  19.     (repeat num
  20.       (setq pts        (cons (polar sp an d) pts)
  21.             sp        (car pts)
  22.       )
  23.     )
  24.     (mapcar '(lambda (x y / el1)
  25.                (setq el1 (subst (cons 10 x) (assoc 10 el) el)
  26.                      el1 (subst (cons 11 (mapcar '+ y v1)) (assoc 11 el1) el1)
  27.                )
  28.                (entmake el1)
  29.              )
  30.             (reverse pts)
  31.             (cdr (reverse pts))
  32.     )
  33.   )
  34.   (princ)
  35. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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


  12. ;;;线开口
  13. (defun c:test040 (/ pt1 pt2 ss i e leng df ss1)
  14.   (CMDLA0)
  15.   (setvar "osmode" 0)
  16.   (setq        NO1 (UREAL 7 "" "\n线长" no1)
  17.         NO2 (UREAL 7 "" "\n缺口长" no2)
  18.         ss  (ssget '((0 . "CIRCLE,ELLIPSE,*LINE,ARC")))
  19.         i   -1
  20.   )
  21.   (while (setq e (ssname ss (setq i (1+ i))))
  22.     (setq leng (vlax-curve-getDistAtParam e (vlax-curve-getEndParam e))
  23.           df   (fix (abs (/ leng (+ NO1 no2))))
  24.     )
  25.     (repeat df
  26.       (setq pt1        (vlax-curve-getPointAtDist
  27.                   (vlax-ename->vla-object e)
  28.                   no1
  29.                 )
  30.             pt2        (vlax-curve-getPointAtDist
  31.                   (vlax-ename->vla-object e)
  32.                   (+ no1 no2)
  33.                 )
  34.       )
  35.       (command "break" e pt1 pt2)
  36.       (setq e (entlast))
  37.     )
  38.   )
  39.   (CMDLA1)
  40. )[/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-1-11 19:20:05 | 显示全部楼层
我觉得你们说的东西好难,我一点也不懂,哎~看来要加油咯!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-1-12 12:33:58 | 显示全部楼层
谢谢eachy斑竹,非常感谢
可是我用的时候她没有完成我那图片那样的效果。。。
^^您在帮忙看下好么


感谢xpy1964,嘻嘻
只不过我们不能用加密的阿
老板检查。。。
*-*3 *-*3 *-*5
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-1-12 12:41:32 | 显示全部楼层
最初由 Aixer 发布
[B]谢谢eachy斑竹,非常感谢
可是我用的时候她没有完成我那图片那样的效果。。。
^^您在帮忙看下好么


感谢xpy1964,嘻嘻
只不过我们不能用加密的阿
老板检查。。。
*-*3 *-*3 *-*5 [/B]

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

使用道具 举报

发表于 2006-1-12 12:46:37 | 显示全部楼层
我是想把间隔的线段放到另外的层上去的,我看2楼的想法很好,能具体点吗
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-1-12 12:54:03 | 显示全部楼层
这样
  1. [FONT=courier new];;;线开口
  2. (defun c:test (/ pt1 pt2 ss i e leng l1)
  3.   (CMDLA0)
  4.   (setvar "osmode" 0)
  5.   (setq        INT (UINT 7 "" "\n缺口数" INT)
  6.         NO2 (UREAL 7 "" "\n缺口长" NO2)
  7.         ss  (ssget '((0 . "CIRCLE,ELLIPSE,*LINE,ARC")))
  8.         i   -1
  9.   )
  10.   (while (setq e (ssname ss (setq i (1+ i))))
  11.     (setq leng (vlax-curve-getDistAtParam e (vlax-curve-getEndParam e))
  12.           l1   (/ (- leng (* int no2)) (+ int 1))
  13.     )
  14.     (if        (> l1 0)
  15.       (progn
  16.         (mkla "缺口" 1);新层,根据需要改
  17.         (sub_upd e 8 "缺口")
  18.         (repeat        int
  19.           (setq        pt1 (vlax-curve-getPointAtDist
  20.                       (vlax-ename->vla-object e)
  21.                       l1
  22.                     )
  23.                 pt2 (vlax-curve-getPointAtDist
  24.                       (vlax-ename->vla-object e)
  25.                       (+ l1 no2)
  26.                     )
  27.           )
  28.           (command "break" e pt1 pt2)
  29.           (setq e (entlast))
  30.         )
  31.       )
  32.       (princ "\n缺口太大!")
  33.     )
  34.   )
  35.   (CMDLA1)
  36. )[/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2006-1-13 18:54:47 | 显示全部楼层

我也來個關於直線的


  1.   [FONT=courier new]
  2. ;;;函數庫裏的
  3. (defun $xdlsp_points_dividebyintval (p1 p2 intval / dis an intv pts)
  4.   (setq dis (distance p1 p2)
  5.         an (angle p1 p2)
  6.         intv (/ dis intval)
  7.   )
  8.   (setq pts (list p1))
  9.   (repeat (- intval 1)
  10.     (setq p1 (polar p1 an intv)
  11.           pts (cons p1 pts)
  12.     )
  13.   )
  14.   (setq pts (cons p2 pts))
  15.   (reverse pts)
  16. )
  17. ;;;主程序
  18. (defun c:test (/ angleofline brpt1 brpt2 distofbreak div-dist
  19.                  div-ptlist ent ep1 ep2 i numofbreak
  20.               )
  21.   (setq ent (entget (car (entsel "\n请点选直线")))
  22.         ep1 (cdr (assoc 10 ent))
  23.         ep2 (cdr (assoc 11 ent))
  24.         angleofline (angle ep1 ep2)
  25.         distofbreak (getdist "\n请输入打断距离:")
  26.         numofbreak (getint "\n请输入等份数:")
  27.         div-ptlist ($xdlsp_points_dividebyintval ep1 ep2 numofbreak)
  28.         div-dist (distance ep1 (cadr div-ptlist))
  29.   )
  30.   (if (<= div-dist distofbreak)
  31.     (setq div-dist (getdist "\n距离太大!请重新输入打断距离:"))
  32.   )
  33.   (setq i 1)
  34.   (while (< i numofbreak)
  35.     (setq brpt1 (polar (nth i div-ptlist) angleofline (/ distofbreak 2)))
  36.     (setq brpt2 (polar (nth i div-ptlist) (+ pi angleofline)
  37.                        (/ distofbreak 2)
  38.                 )
  39.     )
  40.     (command "break" brpt1 brpt2)
  41.     (setq i (1+ i))
  42.   )
  43.   (princ)
  44. )

  45.   [/FONT]


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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2006-1-13 23:16:16 | 显示全部楼层
(command "break" brpt1 brpt2) 不指定实体时在实际应用中可能会受到交叉实体的干扰
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 17:57 , Processed in 0.494721 second(s), 55 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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