meflying 发表于 2004-1-9 17:49:00

都跟你说了,7楼的是三楼的完善程序,所以3楼会有很多问题,而7楼就少些了,所以你应该使用7楼的程序,
至于选择方式,你可以自己修改一下,
三楼的程序未做出错处理及系统变量处理,只是一个测试的程序,而且如果选择点不在线上,则会出错。。。

用7楼的!!!!!!!!!!!!!!!

wb0815 发表于 2004-1-9 22:20:00

是斑竹
可是我试过了用getpoint和getterpoint取出的解过是一样的呀为什么就不行呢

无痕 发表于 2004-1-10 11:23:00

非要写的这么复杂么?
测试下我的代码,我试了几个,反正没问题。
;曲线在两交点处截断并缩短一定距离 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:35:00

无痕发表于2004-1-10 11:23:00static/image/common/back.gif非要写的这么复杂么?
测试下我的代码,我试了几个,反正没问题。
;曲线在两交点处截断并缩短一定距离 by无痕.2004.1
;用于 裁减 避让曲线。
(defun c:brklen ()
   (setq os(getva



你有用"polyline"測試嗎?
我好像都不能用??

meflying 发表于 2004-1-10 11:49:00

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)
)

wb0815 发表于 2004-1-10 12:19:00

无痕 的那种不适合我们用而且不能处理3d线

谢谢斑竹我就要你这个样子的

无痕 发表于 2004-1-10 15:49:00

测试了一下15楼的,有bug

Command: brk
选择交点一:
选择交点二:
选择红线...
Select object: ; 错误: 参数类型错误: numberp: nil

我看前面的程序,好像对选点要求不高,不一定是“交点”,我又测试了一下我的程序在3d下的效果,确实有时候有bug,部分处理错误。因为设置了osmode为32,改为0或者512就好了 。不知楼上是怎么断定我的程序不能处理3d线的。我的操作步骤和me的只是选实体先后次序不同而已,不过你觉得不适合那就没的说了,呵呵。
页: 1 [2]
查看完整版本: 一个关于3d线的问题请大家解决