找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2025|回复: 13

[其他]:曲线选集交点打断

[复制链接]
发表于 2005-12-18 21:31:56 | 显示全部楼层 |阅读模式

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

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

×
这个是自己写的,支持不闭合的曲线选集
包括
"LINE,*POLYLINE,ARC,ELLIPSE,SPLINE"
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-12-19 07:57:30 | 显示全部楼层
狂刀长老的工具!可用与GIS数据的处理,类似于GIS系统中的“自动剪断”功能。下来收藏!
谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-12-19 11:42:11 | 显示全部楼层
Command: xssbrk

"xssbrk = 盄恁摩蝠萸湖剿(巠蚚準敕磁盄妗极)------by 遼絮.2005.12"
Select objects: 1 found

Select objects:
00奀00煦00.01鏃

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

使用道具 举报

发表于 2005-12-19 11:43:33 | 显示全部楼层
處理后還依然是, 不會斷啊, 呵呵!   對象是SPLINE 本身自交的.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-20 07:49:13 | 显示全部楼层
哦,忘了说,不支持自相交曲线。
换一个函数就可以,晚上发上来
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-11-19 22:01:43 | 显示全部楼层
wkai的BREAK_AT_INT.VLX这个不错,功能更强大,不仅可以打断,还可以删短线,在梁线处理上事方便
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-11-21 21:55:35 | 显示全部楼层
我也传个别人的东东骗分~~~~~~~~~~
画线打断


;;;=======================[ BreakAtObject.lsp ]=======================
;;; Author: Charles Alan Butler & Will DeLoach
;;; Version:  1.5 Feb. 22, 2006
;;; Purpose: Break lines, plines, splines, ellipse, circles & arcs
;;;          with a crossing object or user line, not blocks
;;; Sub_Routines: ssget->vla-list
;;;               list->3pair
;;; Requirements:
;;; Returns:  
;;;==============================================================

;;  Ignores objects on locked layers
;;  This code is still under deveopment


(defun c:BX (/ ss brk_obj ents ssobjs cmd obj_erase
                      onlockedlayer ssget->vla-list list->3pair)
  (vl-load-com)

  (defun onlockedlayer (ename / entlst)
    (setq entlst (tblsearch "LAYER" (cdr (assoc 8 (entget ename)))))
    (= 4 (logand 4 (cdr (assoc 70 entlst))))
  )
  (defun ssget->vla-list (ss ent / i ename lst)
    (setq i -1)
    (while (setq ename (ssname ss (setq i (1+ i))))
      ;; check for locked layer, do not use if on locked layer
      (if (and (not (onlockedlayer ename))
               (not (equal ename ent))) ; exclude break object
         (setq lst (cons (vlax-ename->vla-object ename) lst))
      )
    )
    lst
  )
  
  (defun list->3pair (old / new)
    (while (setq new (cons (list (car old) (cadr old) (caddr old)) new)
                 old (cdddr old)))
    (reverse new)
  )

  (setq cmd (getvar "CMDECHO"))
  (setvar "CMDECHO" 0)
  (command ".undo" "begin")


  ;;  get break line or object
  (if (and
        (progn
          (prompt "\nSelect objects to break: ")
          (setq ss (ssget '((0 . "LINE,ARC,SPLINE,LWPOLYLINE,POLYLINE,CIRCLE,ELLIPSE"))))
        )
        (setq p1 (getpoint "\nDraw Breaking line or press ENTER to select: "))
        (setq p2 (getpoint p1 "\nPick end of line."))
      )
    (progn ; got points for a line
      (vl-cmdf "._line" p1 p2 "")
      (setq ent       (entlast)
            obj_erase t ; remove it when done
      )
    )
    (if ss
      (while
        (progn
          (setq ent (car (entsel "\nSelect break entity, No blocks.")))
          (cond
            ((null ent)  nil)
            ((member (cdr (assoc 0 (entget ent)))
                     '("LINE" "ARC" "SPLINE" "LWPOLYLINE" "POLYLINE" "CIRCLE" "ELLIPSE"))
             nil)
            (t (prompt "\n*** Wrong object type, Try again.")
             t)
            )
          )
        )
     )
   )

  
  (if (and ss ent
           (setq ssobjs (ssget->vla-list ss ent)))
    (progn
      (setq brk_obj (vlax-ename->vla-object ent))
      (mapcar
        '(lambda (obj2Break / iplist brkobjlst lastent) ; loop through list of objects to be broken
           ; get list of intersect points
           (setq iplist (vl-catch-all-apply 'vlax-safearray->list
                          (list (vlax-variant-value
                             (vla-intersectwith brk_obj obj2Break acextendnone))))
           )
           (setq brkobjlst (cons obj2Break brkobjlst)) ; collect the original object to be broken
           (if (not (vl-catch-all-error-p iplist));  error if no intersection
             (mapcar  ; loop through  intersect points
               '(lambda (pt / cen elst maxparam minparam p1 p2 p1param p2param)
                  ;;  get last entity created via break in case multiple breaks
                     (if (and lastent (not (equal lastent (vlax-vla-object->ename brk_obj)))) ; ignore the break object
                       (progn ; new object created via break, put in list
                         (setq brkobjlst (cons (vlax-ename->vla-object (entlast)) brkobjlst))
                         ;;  if pt not on object x, switch objects
                         (if (not (vlax-curve-getdistatpoint obj2Break pt))
                           (foreach obj brkobjlst ; find the one that pt is on
                             (if (vlax-curve-getdistatpoint obj pt)
                                (setq obj2Break obj) ; switch objects
                               )
                             )
                         )
                       )
                     )

                 ;;  Handle any objects that can not be use with the Break Command
                 ;;  using one point
                 (cond
                    ((and (= "AcDbSpline" (vla-get-objectname obj2Break)) ; only closed splines
                          (vlax-curve-isClosed obj2Break)
                          )
                      (setq p1param  (vlax-curve-getparamatpoint obj2Break pt)
                            p2param  (+ p1param 0.000001)
                            p2       (vlax-curve-getPointAtParam obj2Break p2param)
                      )
                     (command "._break" (vlax-vla-object->ename obj2Break) "non" (trans pt 0 1) "non" (trans p2 0 1))
                    )
                    ((= "AcDbCircle" (vla-get-objectname obj2Break)) ; break the circle
                      (setq p1param  (vlax-curve-getparamatpoint obj2Break pt)
                            p2param  (+ p1param 0.000001)
                            p2       (vlax-curve-getPointAtParam obj2Break p2param)
                      )
                     (command "._break" (vlax-vla-object->ename obj2Break) "non" (trans pt 0 1) "non" (trans p2 0 1))
                     (setq en (entlast))
                    )
                    ((and (= "AcDbEllipse" (vla-get-objectname obj2Break)) ; only closed ellipse
                          (vlax-curve-isClosed obj2Break))
                      ;;  Break the ellipse, code borrowed from Joe Burke  6/6/2005
                      (setq p1param  (vlax-curve-getparamatpoint obj2Break pt)
                            p2param  (+ p1param 0.000001) ;(vlax-curve-getparamatpoint obj p2)
                            minparam (min p1param p2param)
                            maxparam (max p1param p2param)
                      )
                      (vlax-put obj2Break 'startparameter maxparam)
                      (vlax-put obj2Break 'endparameter (+ minparam (* pi 2)))
                    )
                    ;;==================================
                    ;;   Objects that can be broken     
                    ;;==================================
                    (t
                     ;;(command "point"  "non" (trans pt 0 1))
                     ;;(command "._break" (vlax-vla-object->ename obj2Break) "non" (trans pt 0 1) "@")
                     (command "._break" (vlax-vla-object->ename obj2Break) "non" (trans pt 0 1) "non" (trans pt 0 1))
                     ;;  could not get vl-cmdf "._break" to behave
                     (setq lastent (entlast))
                    )
                  )

                )
               (list->3pair iplist)
             )
           )
         )
        ssobjs
      )
      ;; remove the break line, if current layer is not locked
      (if obj_erase
         (vl-catch-all-apply 'vla-delete (list brk_obj))
      )
    )
  )
  (setvar "CMDECHO" cmd)
  (not (command ".undo" "end"))
  (princ)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

已领礼包: 3个

财富等级: 恭喜发财

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

使用道具 举报

已领礼包: 4个

财富等级: 恭喜发财

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

使用道具 举报

已领礼包: 225个

财富等级: 日进斗金

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-24 21:29 , Processed in 0.341328 second(s), 58 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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