江南十笑 发表于 2020-8-18 09:15:57

nentsel如何获得块内直线在当前坐标下的两个端点

本帖最后由 江南十笑 于 2020-8-18 09:16 编辑

;轴线等分梁;目前问题线只能是直线
(defun c:666 ()
(LWWCSH)
;(setq PL1 (entsel "\n请选取第一条轴线[必须是直线]:")
(setq PL1(nentsel "\n请选取第一条轴线[必须是直线]:")
    PL2 (nentsel "\n请选取第二条轴线[必须是直线]:")
    j-j (GETREAL "\n请输入梁宽:")
    OFW (GETINT "\n请输入等分数量(梁根数+1):")
    n 1)


(lwwsctc"S-GRID"14"DOTE"1t)
(lwwsctc"S-BEAM"4"DASHED"1t)

(if (< j-j 0)(progn (princ "输入梁宽小于0,按0计算") (setq j-j 0)))
(if (< OFW 2)(progn (princ "指定等分数量小于2,按2计算") (setq OFW 2)))
(Setq pl1p1 (cdr (assoc 10 (entget (car pl1))))
    pl1p2 (cdr (assoc 11 (entget (car pl1))))
    pl2p1 (cdr (assoc 10 (entget (car pl2))))
    pl2p2 (cdr (assoc 11 (entget (car pl2))))
)
(if (< (DISTANCE pl1p1 pl2p1) (DISTANCE pl1p1 pl2p2))
    (setq jl (DISTANCE pl1p1 pl2p1)
      jd (ANGLE pl1p1 pl2p1))
    (setq jl (DISTANCE pl1p1 pl2p2)
      jd (ANGLE pl1p1 pl2p2))
) (while (< n ofw)
    (entmake (list '(0 . "line")'(62 . 256 )'(8 . "S-GRID" )(cons 10 (polar pl1p1 jd (* n (/ jl ofw)) )) (cons 11 (polar pl1p2 jd(* n (/ jl ofw)) )) ))
    (entmake (list '(0 . "line")'(62 . 256 ) '(8 . "S-BEAM" ) (cons 10 (polar pl1p1 jd (- (* n (/ jl ofw)) (/ j-j 2.))))(cons 11 (polar pl1p2 jd (- (* n (/ jl ofw)) (/ j-j 2.))))) )
    (if (/= j-j 0)
          (entmake (list '(0 . "line")'(62 . 256 ) '(8 . "S-BEAM" ) (cons 10 (polar pl1p1 jd (+ (* n (/ jl ofw)) (/ j-j 2.))))(cons 11 (polar pl1p2 jd (+ (* n (/ jl ofw)) (/ j-j 2.))))) )
                )
    (setq n (+ 1 n))
        )
        (LWWEND)
        (princ)
)





如上所示当所选轴线不在块内程序运行无误当所选直线在嵌套块内生成的位置就跑了如何修改 让生成的位置正确


Bao_lai 发表于 2020-8-18 23:59:52

trans函数转换一下坐标
页: [1]
查看完整版本: nentsel如何获得块内直线在当前坐标下的两个端点