- UID
- 517
- 积分
- 935
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2002-1-14
- 最后登录
- 1970-1-1
|
发表于 2005-3-24 14:56:04
|
显示全部楼层

- ;;By LUCAS(龍龍仔)
- ;;這是最初版本,錯漏百出,供你參考!
- ;;後來程序越來越難看,不便貼出.
- ;;(*polyline & spline---閉合&首尾點重合沒有弄好) 8-(
- ;;線類思路
- ;;1.在trim後,先取出想要的(1~2個點),再undo
- ;;2.計算trim後線長度,用lengthen調整線長
- ;;圓、橢圓思路
- ;;1.正常trim圓、橢圓
- ;;2.修改端點(交換)
- (defun C:TRIM_REMAIN (/ DATA50 DATA51 ENT ENTT ENTTT
- HOLDECHO LEND LENT LSTART PT10
- PT11 SS TYP E42
- )
- (vl-load-com)
- (defun DO_IT ()
- (if (member PT11
- (list (vlax-curve-getstartpoint ENTT)
- (vlax-curve-getendpoint ENTT)
- )
- )
- (command "_.undo"
- 1
- "_.lengthen"
- "de"
- (- LSTART)
- (list (car ENT) PT11)
- ""
- )
- (command "_.undo"
- 1
- "_.lengthen"
- "de"
- (- LSTART)
- (list (car ENT) PT10)
- ""
- )
- )
- )
- (setq HOLDECHO (getvar "cmdecho"))
- (setvar "cmdecho" 0)
- (command "_.UNDO" "_GROUP")
- (while
- (and (setq
- ENT (entsel "\n選取保留段: ")
- )
- (setq TYP (cdr (assoc 0 (entget (car ENT)))))
- (wcmatch TYP "*POLYLINE,SPLINE,LINE,ARC,CIRCLE,ELLIPSE")
- )
- (if (wcmatch TYP "ELLIPSE")
- (setq E42 (cdr (assoc 42 (entget (car ENT)))))
- )
- (setq ENTT (vlax-ename->vla-object (car ENT)))
- (setq PT10 (vlax-curve-getstartpoint ENTT)
- PT11 (vlax-curve-getendpoint ENTT)
- )
- (setq LENT (entlast))
- (command "_.select" "all" "r" (car ENT) "")
- (setq SS (ssget "p"))
- (command "_.trim" "l" "" "p" "n" "e" "n" "" "_.trim" SS "" ENT "")
- (if (wcmatch (cdr (assoc 0 (entget (entlast))))
- "*POLYLINE,SPLINE,LINE,ARC,CIRCLE,ELLIPSE"
- )
- (setq LEND (vlax-curve-getdistatparam
- (setq ENTTT (vlax-ename->vla-object (entlast)))
- (vlax-curve-getendparam ENTTT)
- )
- )
- )
- (cond
- ((and (wcmatch TYP "POLYLINE")
- (not (equal LENT (entlast)))
- )
- (setq LSTART
- (vlax-curve-getdistatparam
- (setq ENTT (vlax-ename->vla-object (entnext LENT)))
- (vlax-curve-getendparam ENTT)
- )
- )
- (if (not (equal (entnext LENT) (entlast)))
- (command "_.undo"
- 1
- "_.lengthen"
- "de"
- (- LSTART)
- (list (car ENT) PT10)
- ""
- "_.lengthen"
- "de"
- (- LEND)
- (list (entlast) PT11)
- ""
- )
- (DO_IT)
- )
- )
- ((wcmatch TYP "CIRCLE")
- (setq ENT
- (entget (ssname (ssget "X"
- (list (cons 0 "ARC")
- (assoc 10 (entget (car ENT)))
- )
- )
- 0
- )
- )
- )
- (setq DATA50 (cdr (assoc 50 ENT)))
- (setq DATA51 (cdr (assoc 51 ENT)))
- (setq ENT (vl-remove (assoc 50 ENT) ENT))
- (setq ENT (vl-remove (assoc 51 ENT) ENT))
- (setq
- ENT (append ENT (list (cons 50 DATA51) (cons 51 DATA50)))
- )
- (entmod ENT)
- (command "_.move" (cdr (assoc -1 ENT)) "" "0,0" "@")
- )
- ((and (wcmatch TYP "ELLIPSE")
- (equal E42 6.28318530717 0.00000000001)
- )
- (setq ENT
- (entget (ssname (ssget "X"
- (list (cons 0 "ELLIPSE")
- (assoc 10 (entget (car ENT)))
- )
- )
- 0
- )
- )
- )
- (setq DATA50 (cdr (assoc 41 ENT)))
- (setq DATA51 (cdr (assoc 42 ENT)))
- (setq ENT (vl-remove (assoc 41 ENT) ENT))
- (setq ENT (vl-remove (assoc 42 ENT) ENT))
- (setq
- ENT (append ENT (list (cons 41 DATA51) (cons 42 DATA50)))
- )
- (entmod ENT)
- (command "_.move" (cdr (assoc -1 ENT)) "" "0,0" "@")
- )
- (t
- (setq LSTART (vlax-curve-getdistatparam
- ENTT
- (vlax-curve-getendparam ENTT)
- )
- )
- (if (not (equal (entlast) LENT))
- (command "_.undo"
- 1
- "_.lengthen"
- "de"
- (- LSTART)
- (list (car ENT) PT10)
- ""
- "_.lengthen"
- "de"
- (- LEND)
- (list (car ENT) PT11)
- ""
- )
- (DO_IT)
- )
- )
- )
- )
- (command "_.UNDO" "_END")
- (setvar "cmdecho" HOLDECHO)
- (princ)
- )
- (prompt "\nType Trim_remain,By LUCAS(龍龍仔)")
- (princ)
|
|