weiqi 发表于 2012-12-28 23:35:13

修改F命令 Z轴归0倒角

画图的时候 得用到捕捉 ,如果一个图块 Z轴不为0的话,对象捕捉和这个块有关的点(端点,中点,交点。。。)都会有个Z坐标,如果用F命令的话,会出现 两直线不共面的情况。


(defun c:ff()
   (setvar "cmdecho" 0)
   (setvar "blipmode" 0)
   (graphscr)
   (prompt "倒角 Z轴归零:") (terpri)

   (princ "选择第一条线")
(setq s (ssget))
   (setq len (sslength s))
   (setq index 0)

   (repeat len
      (setq a (entget (ssname s index)))

      (setq b10 (assoc 10 a))
      (setq b11 (assoc 11 a))

      (setq x10 (cadr b10))
      (setq y10 (caddr b10))

      (setq x11 (cadr b11))
      (setq y11 (caddr b11))

      (setq b101 (cons 10 (list x10 y10 0)))
      (setq b111 (cons 11 (list x11 y11 0)))

      (setq a (subst b101 b10 a))
      (entmod a)
      (setq a (subst b111 b11 a))
      (entmod a)

      (setq index (+ index 1))
   )
   (princ "第一条线Z轴已归0")
   (princ "选择第二条线")
(setq s2 (ssget))
   (setq len2 (sslength s2))
   (setq index2 0)

   (repeat len2
      (setq a2 (entget (ssname s2 index2)))

      (setq b10 (assoc 10 a2))
      (setq b11 (assoc 11 a2))

      (setq x10 (cadr b10))
      (setq y10 (caddr b10))

      (setq x11 (cadr b11))
      (setq y11 (caddr b11))

      (setq b101 (cons 10 (list x10 y10 0)))
      (setq b111 (cons 11 (list x11 y11 0)))

      (setq a2 (subst b101 b10 a2))
      (entmod a2)
      (setq a2 (subst b111 b11 a2))
      (entmod a2)

      (setq index2 (+ index2 1))
   )
   (princ "第二条线Z轴已归0")
   (princ "倒角成功")
(command "FILLET" s s2)

   (princ)
)

代码十分丑陋,望高手出手。。。

   (princ "选择第一条线")
(setq s (ssget))

想用
entsel代替,用不了噢?得怎么写才对

ZZXXQQ 发表于 2012-12-29 08:07:07


(defun c:ff()
(setvar "cmdecho" 0)
(setvar "blipmode" 0)
(graphscr)
(princ "倒角 Z轴归零:")
(setq s (entsel "\n选择第一条线"))
(setq s2 (entsel "\n选择第二条线"))
(command "_.MOVE" s s2 "" "0,0,0" "0,0,1e99")
(command "_.MOVE" s s2 "" "0,0,0" "0,0,-1e99")
(princ "二条线Z轴已归0\n倒角成功")
(command "FILLET" s s2)
(princ)
)

millermin 发表于 2013-1-1 13:14:33

本帖最后由 millermin 于 2013-1-1 13:16 编辑

这两种归零方法我都用过,感觉效果不彻底。试用一小段时间就会发现失败的案例。所以后来我还是用flatten程序。这是et工具,你很容易获得他的源码。有兴趣可以看我的贴。
http://bbs.mjtd.com/thread-99491-1-1.html

kwok 发表于 2013-1-1 15:59:35

millermin 发表于 2013-1-1 13:14 static/image/common/back.gif
这两种归零方法我都用过,感觉效果不彻底。试用一小段时间就会发现失败的案例。所以后来我还是用flatten程序 ...

可以把用flatten后来倒角的码贴上来学习一下么
.

ygp820601 发表于 2013-1-1 19:36:05

归零:
沿Z轴平移1E99,再平移-1E99,搞定。

millermin 发表于 2013-1-2 02:23:14

kwok 发表于 2013-1-1 15:59 static/image/common/back.gif
可以把用flatten后来倒角的码贴上来学习一下么
.

供参考,仅适合我自己,所以你自己再调整。

(defun c:ppl( )
(vl-load-com)
(setvar "cmdecho" 0)

(setq sal "\nENTER DRAWINGS SCALE")
(setq rad(* 0.6 sal))

(setq pln1-data(entsel "\nCHOOSE the 1st LINE:"))
(setq pln1(car pln1-data))
(setq pt1(cadr pln1-data) )   ; osnap ***"nea"

(setq pln1 (flt pln1))

(while (/= "")

   (setq pln2-data (entsel "\nCHOOSE the 2nd LINE:"))
   (setq pln2(car pln2-data))
   (setq pln2 (flt pln2))
   (command "EXPLODE" pln2 )      
   (setq pln2 (entlast))
   (setq pt2(cadr pln2-data) )

   (setvar "osmode" 0)
   (command "fillet" "r" rad )
   (command"fillet" (list pln1 pt1) (list pln2 pt2) )
   (setq pt1 pt2)
   (setvar "osmode" 15359)
)

(princ)
)


(defun flt(ob)
(acet-autoload2 '("FLATTENSUP.LSP" (acet-flatn ss hide)))
(setq ss (ssadd))
(ssadd ob ss)
(setq ss (acet-flatn ss t))
(setq ob (ssname ss 0))
)

weiqi 发表于 2013-1-14 02:01:03

ygp820601 发表于 2013-1-1 19:36 static/image/common/back.gif
归零:
沿Z轴平移1E99,再平移-1E99,搞定。

但是 如果是 大于1E99貌似就不行了。我画图中,就用LE99这个F还是经常出现 不行了。
页: [1]
查看完整版本: 修改F命令 Z轴归0倒角