szx025 发表于 2013-11-4 10:34:19

不能剪切相交线段了

;    =============================================
;    |             截断线自动绘制软件            |
;    |             |
;    =============================================
(defun C:zx(/ pt1 pt2 dis x1 pt3 pt4 pt5 pt6 p1 p2 ptt ang ang1 scale)
;;保存系统变量设置
(setq old_OS(getvar "OSMODE")
      old_CMD (getvar "CMDECHO")
       old_OR (getvar "OrthoMode")
    )
(setvar "CMDECHO" 0)
(setvar "OSMODE" 0)
(setvar "OrthoMode" 0)
(setq scale (getreal "\nScale<100>:"))
(if (= scale nil)
(setq scale 100)
)
(setq pt1 (getpoint "\nFirst point:"))
(setq pt2 (getpoint pt1 "\nSecond point:"))
(setq ang (angle pt1 pt2))
(setq dis (distance pt1 pt2))
(setq x1 (/ (- dis (* 2 scale)) 2))
(setq pt3 (polar pt1 ang x1))
(setq pt4 (polar pt1 ang (+ x1 (* 2 scale))))
(setq pt5 (polar pt3 (+ ang 1.32582) (* 2.0616 scale)))
(setq pt6 (polar pt4 (- ang 1.81577) (* 2.0616 scale)))
(command "pline" pt1 pt2 "")
   (setq ee (entlast))
   (setVar "OrthoMode" 1)
(setq ptt (getpoint pt2 "\n剪切方向:"))
(setq ang1 (angle pt2 ptt))
(setq p1 (polar pt1 ang1 100))
(setq p2 (polar pt2 ang1 100))
   (command "_trim" ee "" "f" p1 p2"" "")
(entdel ee)
(command "pline" pt1 "w" "0" "0" pt3 pt5 pt6 pt4 pt2 "")
   ;;恢复系统变量设置
    (setvar "CMDECHO" old_CMD)
    (setvar "OSMODE" old_OS)
    (setvar "OrthoMode" old_OR)
(princ)(princ)
)      
这是一个能正常执行的画折断线并按指定方向剪切同折断线相交线段的程序,但我在(entdel ee)语句下面增加如下几语
(setq p1 (polar pt1 ang1 100))
(setq p2 (polar pt2 ang1 100))
(setq p3 (polar pt2 ang1 1000))
(setq p4 (polar pt1 ang1 1000))
(setq pts (list P1 P2 P3 P4))
(command"_ERASE"(ssget "WP" pts)"")
程序改为
(defun C:zx(/ pt1 pt2 dis x1 pt3 pt4 pt5 pt6 p1 p2 p3 p4 ptt pts ang ang1 scale)
;;保存系统变量设置
(setq old_OS(getvar "OSMODE")
      old_CMD (getvar "CMDECHO")
       old_OR (getvar "OrthoMode")
    )
(setvar "CMDECHO" 0)
(setvar "OSMODE" 0)
(setvar "OrthoMode" 0)
(setq scale (getreal "\nScale<100>:"))
(if (= scale nil)
(setq scale 100)
)
(setq pt1 (getpoint "\nFirst point:"))
(setq pt2 (getpoint pt1 "\nSecond point:"))
(setq ang (angle pt1 pt2))
(setq dis (distance pt1 pt2))
(setq x1 (/ (- dis (* 2 scale)) 2))
(setq pt3 (polar pt1 ang x1))
(setq pt4 (polar pt1 ang (+ x1 (* 2 scale))))
(setq pt5 (polar pt3 (+ ang 1.32582) (* 2.0616 scale)))
(setq pt6 (polar pt4 (- ang 1.81577) (* 2.0616 scale)))
(command "pline" pt1 pt2 "")
   (setq ee (entlast))
   (setVar "OrthoMode" 1)
(setq ptt (getpoint pt2 "\n剪切方向:"))
(setq ang1 (angle pt2 ptt))
   (command "_trim" ee "" "f" p1 p2"" "")
(entdel ee)
(setq p1 (polar pt1 ang1 100))
(setq p2 (polar pt2 ang1 100))
(setq p3 (polar pt2 ang1 1000))
(setq p4 (polar pt1 ang1 1000))
(setq pts (list P1 P2 P3 P4))
(command"_ERASE"(ssget "WP" pts)"")
(command "pline" pt1 "w" "0" "0" pt3 pt5 pt6 pt4 pt2 "")
   ;;恢复系统变量设置
    (setvar "CMDECHO" old_CMD)
    (setvar "OSMODE" old_OS)
    (setvar "OrthoMode" old_OR)
(princ)(princ)
)      
这个程序也能正常执行,但不能剪切同折线相交的线段了,这是为啥


emk 发表于 2013-11-4 10:50:35

emk 发表于 2013-11-4 10:55:11

(command "_trim" ee "" "f" p1 p2"" "")
这里的p1p2没有赋值!

emk 发表于 2013-11-4 10:58:34

(setq p1 (polar pt1 ang1 100))
(setq p2 (polar pt2 ang1 100))
建议用截断口垂高加nmm来定这个100,如果你的坡口大于100,程序会剪切掉截断线本身

cnks 发表于 2013-11-4 10:58:56

应该是不在同一z值的情况

emk 发表于 2013-11-4 11:02:17

(setq ptt (getpoint pt2 "\n剪切方向:"))
(setq ang1 (angle pt2 ptt))
这个角度对吗?应该找ptt在pt1pt2的垂点,判断ptt在pt1pt2的哪一侧

szx025 发表于 2013-11-4 11:12:55

谢谢emk的指点
页: [1]
查看完整版本: 不能剪切相交线段了