;;; 修改 荒野孤行 的不修剪圆角程序而来
;;; bug:倒角后汇合线上有重叠线未删除,我想用;(if (<= len2 len3)(progn (vla-delete obj2)(ssadd ent3 ent2))(vla-delete obj3))这句来删除,但程序无法往下循环,不知是否是删除了ent2引起的?用(ssadd ent3 ent2)把ent3转为ent2可以吗?到底错在哪?请帮忙指点并完善。
程序如下: - (defun c:bz (/ dd1 dd2 backup_dd1 backup_dd2 i ss ent1 ent2 ent3)
- (setvar "OSMODE" 15359)
- (setvar "CMDECHO" 0)
- (princ "\n★功能:将两线进行倒角但不修剪。\n提示:若要完成结束请按空格键或Enter键,这样撤销操作可一步到位!\n")
- (vl-load-com)
- (setq backup_dd1 (getvar "CHAMFERA")
- backup_dd2 (getvar "CHAMFERB"))
- (initget 4)
- (if (not (setq dd1 (getreal (strcat "\n输入倒角距离:<" (rtos backup_dd1) ">"))))
- (setq dd1 backup_dd1 dd2 backup_dd2)
- )
- (setvar "CHAMFERA" dd1)
- (setvar "CHAMFERB" dd1)
- (command "undo" "be")
- (setvar "OSMODE" 0)
- (princ "\n选择一根或一组线折弯:")
- (setq ss (ssget '((0 . "line"))))
- (setq ent2 (entsel "\n选择一条汇合线(选择位置决定折弯方向):"))
- (setq i 0);;;
- (while (< i (sslength ss));;;
- (setq ent1 (ssname ss i));;;
- (command "copy" (car ent2) "" '(0 0) '(0 0))
- (setq ent3 (entlast)
- obj3 (vlax-ename->vla-object ent3)
- len3 (vlax-curve-getdistatparam obj3 (vlax-curve-getendparam obj3)))
- (command "chamfer" "T" "T" ent1 ent2)
- (setq obj2 (vlax-ename->vla-object (car ent2))
- len2 (vlax-curve-getdistatparam obj2 (vlax-curve-getendparam obj2)))
- ;(if (<= len2 len3)(progn (vla-delete obj2)(ssadd ent3 ent2))(vla-delete obj3))
- (princ)
- (setq i (+ i 1));;;
- )
- (command "undo" "e")
- (setvar "OSMODE" 15359)
- (princ)
- )
|