找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: xtdwynij

[已解决] 多选直线按指定打断距离打断直线

[复制链接]

已领礼包: 449个

财富等级: 日进斗金

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

使用道具 举报

已领礼包: 449个

财富等级: 日进斗金

 楼主| 发表于 2013-4-14 16:44:05 | 显示全部楼层
[pcode=lisp,true]
(defun c:tt ()
  (setvar "osmode" 0)
  (setvar "cmdecho" 0)
   (setq ss (ssget '((0 . "LINE"))))
   (setq i 0)
   (repeat (sslength ss)
     (setq name (ssname ss i))
     (setq ent (entget name))
     (setq pt10 (cdr (assoc 10 ent)))
     (setq pt11 (cdr (assoc 11 ent)))
     (setq dist (distance pt10 pt11))
     (setq ang (angle pt10 pt11))
     (cond
       ((>= dist 20) (if (=(rem(/ dist 100))0) (setq gs (/ dist 100)) (setq gs (1+ (fix (/ dist 100))))))   
       ((< dist 20) (setq gs 1))
       (t (alert "桥位出了问题了"))
     )                      ; 桥位的个数
     
     (setq b (if (>= dist 20) 2 0.75)) ;此处为打断的一半距离
     (setq abc 1)
     (setq dist1 (/ dist (1+ gs)))
     (repeat gs  
       (setq pt1 (polar pt10 ang dist1)) ; 距离  
       (setq pt2 (polar pt1 ang b)
             pt3 (polar pt1 ang (- b))
       )
       (command "_.break" "f" pt2  pt3) ;此处遇到了问题,打断的话这样类似于修剪,产生新的图元也是这样么?求出手~~
       (setq dist1 (+ dist1 dist1))
       (setq abc (1+ abc))
     )
     (setq i (1+ i))
   )
   (setvar "osmode" 3)
   (setvar "osmode" 1)
)
[/pcode]

Free-Lancer 师兄.我根据你的代码做了以下修改.但一样也是不行.拿了你的代码运行也达不到我要的郊果!晓东大神曾指点打断后得出最后的图元,可实在是搞不懂这些!还请出手完善代码!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 449个

财富等级: 日进斗金

 楼主| 发表于 2013-4-14 16:51:44 | 显示全部楼层
xtdwynij 发表于 2013-4-14 16:44
(defun c:tt ()
  (setvar "osmode" 0)
  (setvar "cmdecho" 0)

如何始终选 择原实体呢?如果是纯LISP的话.VL开头的函数菜鸟我还没有开始学!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-4-14 16:52:50 | 显示全部楼层
本帖最后由 Free-Lancer 于 2013-4-14 16:55 编辑

用 Dwg 说明,30 楼代码可以打断,不过大于 100 的是按等分数断开(均分)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 449个

财富等级: 日进斗金

 楼主| 发表于 2013-4-14 16:56:31 | 显示全部楼层
Free-Lancer 发表于 2013-4-14 16:52
用 Dwg 说明,30 楼代码可以打断,不过大于 100 的是按等分数断开

DWG说明是什么意思?嗯.30楼师兄的代码是有一段线是打成很多段的!F白ree-Lancer师兄能完善一下我的代码么?纯LISP的!VL的回头我再看一下各自的作用!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-4-14 17:01:06 | 显示全部楼层
没搞明白你的 105 打断两次,200的也打断两侧是什么意思?多长距离打断?在 100 的地方?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 449个

财富等级: 日进斗金

 楼主| 发表于 2013-4-14 17:16:55 | 显示全部楼层
我的意思是这样!假如是长度大于20少于或等于100的打断距离为4MM 打断一次 长度小于20的打断距离为1.5MM 也是打断一次 长度超过一百的除以100 有余数的等于结果整数+1 没有余数的直接等于结果整数 比如:105\100 余数为5 有余数就加1 那么就等于整数+1 打断二次 200\100 没有余数那么就等于2 不加 打断距离都是4MM
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 449个

财富等级: 日进斗金

 楼主| 发表于 2013-4-14 17:17:55 | 显示全部楼层
xtdwynij 发表于 2013-4-14 17:16
我的意思是这样!假如是长度大于20少于或等于100的打断距离为4MM 打断一次 长度小于20的打断距离为1.5MM 也是 ...

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

使用道具 举报

发表于 2013-4-14 17:54:01 | 显示全部楼层
本帖最后由 Free-Lancer 于 2013-4-14 18:26 编辑

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

使用道具 举报

已领礼包: 449个

财富等级: 日进斗金

 楼主| 发表于 2013-4-14 17:58:44 | 显示全部楼层

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

使用道具 举报

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

使用道具 举报

发表于 2013-4-14 18:25:06 | 显示全部楼层
这样就对了
[pcode=lisp,true];;(vl-load-com)
(defun c:tt (/ mkline getpts ss i sl e el sp ep pl)
  ;;divide n
  (defun getpts        (sp ep n dw / d d1 d2 an p1 p2)
    (setq d  (distance sp ep)
          d1 (- d (* (1- n) 2. dw))
          an (angle sp ep)
          d2 (/ d1 n)
          tf t
    )
    (repeat (1- n)
      (setq p1 (polar sp an d2)
            p2 (polar p1 an (* dw 2))
            pl (cons (list p2 p1) pl)
            sp p2
      )
    )
    (apply 'append pl)
  ) ;_生成逆序点,用来Break
  ;;Main
  (while (setq ss (ssget '((0 . "line"))))
    (setq sl (sslength ss)
          i  -1
    )
    (repeat sl
      (setq e  (ssname ss (setq i (1+ i)))
            el (entget e)
            sp (cdr (assoc 10 el)) ;_dxf
            ep (cdr (assoc 11 el)) ;_dxf
            d  (distance sp ep) ;_line length
               ;;sp (vlax-curve-getstartpoint e);_比assoc + cdr 简单高效
               ;;ep (vlax-curve-getendpoint e)
               ;;d  (vlax-curve-getEndParam e);_对Line而言省了distance,如果是spline,arc,pline 要改改
      )
      (cond
        ((< 0 d 20.)
         (setq pl (getpts sp ep 2 0.75))
        )
        ((<= 20 d 100)
         (setq pl (getpts sp ep 2 2.))
        )
        ((< 100 d)
         (setq pl (getpts sp ep (1+ (fix (/ d 100.))) 2.))
        )
      )
      (while pl
        (vl-cmdf ".break"
                 (list e sp)
                 "_f"
                 "_none"
                 (car pl)
                 "_none"
                 (cadr pl)
        ) ;_始终选择的是原实体
        (setq pl (cddr pl))
      )
    )
  )
  (princ)
)[/pcode]

评分

参与人数 1D豆 +4 收起 理由
XDSoft + 4 技术引导讨论和指点奖!

查看全部评分

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

使用道具 举报

已领礼包: 449个

财富等级: 日进斗金

 楼主| 发表于 2013-4-14 18:42:42 | 显示全部楼层
Free-Lancer 发表于 2013-4-14 18:25
这样就对了
;;(vl-load-com)
(defun c:tt (/ mkline getpts ss i sl e el sp ep pl)

是这样的郊果!8谢Free-Lancer 师兄出手相助.也怪我没有表达清楚!下次发贴前一定要表达清楚!麻烦了很多人.感到蛮不好意思的!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

已领礼包: 685个

财富等级: 财运亨通

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 16:49 , Processed in 0.424274 second(s), 57 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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