至于选择方式,你可以自己修改一下,
三楼的程序未做出错处理及系统变量处理,只是一个测试的程序,而且如果选择点不在线上,则会出错。。。
用7楼的!!!!!!!!!!!!!!! 是斑竹
可是我试过了用getpoint和getterpoint取出的解过是一样的呀为什么就不行呢 非要写的这么复杂么?
测试下我的代码,我试了几个,反正没问题。
;曲线在两交点处截断并缩短一定距离 by无痕.2004.1
;用于 裁减 避让曲线。
(defun c:brklen ()
(setq os(getvar "osmode")
nos (setvar "osmode" 32)
el(entsel "\n选则要避让的线条:")
e1(car el)
elast(entlast)
pt1 (getpoint "\n选则交点1:")
pt2 (getpoint "\n选则交点2:"))
(vl-cmdf ".break" e1 "f" pt1 pt2)
(vl-cmdf ".lengthen" "DE" (- 0 100) (list e1 pt1)""
".lengthen" "DE" (- 0 100) (list (if (equal (entlast) elast) e1 (entlast)) pt2) "");;if处理封闭曲线;
(setvar "osmode" os)
(princ)
)
无痕发表于2004-1-10 11:23:00static/image/common/back.gif非要写的这么复杂么?
测试下我的代码,我试了几个,反正没问题。
;曲线在两交点处截断并缩短一定距离 by无痕.2004.1
;用于 裁减 避让曲线。
(defun c:brklen ()
(setq os(getva
你有用"polyline"測試嗎?
我好像都不能用?? 7楼主函数这样改,则不需要getinterpoint函数
to:无痕,与我的意思有所不同,我中间的线是保留的,只是打断,不知道楼主要什么样的。。。
(defun c:Brk( / pt1 pt2 pt param1 param2 param ent entv ent2 ent2v)
(setq errtmp *error*)
(setq *error* err)
(setq pt1 (getpoint "\n选择交点一:"))
(setq pt2 (getpoint "\n选择交点二:"))
(setq os (getvar "osmode"))
(setvar "osmode" 0)
(setvar "cmdecho" 0)
(prompt "\n选择红线...")
(setq ent (car (entsel)))
(setq entv (vlax-ename->vla-object ent))
(setq param1 (vlax-curve-getParamAtPoint entv pt1))
(setq param2 (vlax-curve-getParamAtPoint entv pt2))
(if (< param2 param1)
(progn
(setq pt pt2
pt2 pt1
pt1 pt)
(setq param param2
param2 param1
param1 param)
)
)
(setq pt1 (vlax-curve-getPointAtDist entv (- (vlax-curve-getDistAtParam entv param1) 0.5)))
(setq pt2 (vlax-curve-getPointAtDist entv (+ (vlax-curve-getDistAtParam entv param2) 0.5)))
(setcolor ent 4)
(setvar "osmode" 0)
(command "_.break" (list ent pt1) "f" pt1 "@")
(setcolor (entlast) 1)
(setq ent2 (entlast))
(setq ent2v (vlax-ename->vla-object ent2))
(command "_.break" (list ent2 pt2) "f" pt2 "@")
(setcolor (entlast) 4)
(setq *error* errtmp)
(setvar "osmode" os)
(princ)
)
无痕 的那种不适合我们用而且不能处理3d线
谢谢斑竹我就要你这个样子的 测试了一下15楼的,有bug
Command: brk
选择交点一:
选择交点二:
选择红线...
Select object: ; 错误: 参数类型错误: numberp: nil
我看前面的程序,好像对选点要求不高,不一定是“交点”,我又测试了一下我的程序在3d下的效果,确实有时候有bug,部分处理错误。因为设置了osmode为32,改为0或者512就好了 。不知楼上是怎么断定我的程序不能处理3d线的。我的操作步骤和me的只是选实体先后次序不同而已,不过你觉得不适合那就没的说了,呵呵。
页:
1
[2]