yaker77 发表于 2013-10-24 14:48:02

哪位高人帮我看一下这个程序

目的是在指定点把给定的长度分成多段线折线画出来。
当屏幕视口适当时,可以正常画。但当屏幕视口缩小时,坐标点就错了,线就画错了。
哪位大侠帮我修改一下,谢谢了。
;;;-------------------------------------------------------------------------
;                                 ;;画安装线段
;;;-------------------------------------------------------------------------
(defun C:AZXD(/ AZLp0 p1 p2 p3 p4 p5 p6 )
   (setq AZL (getdist"请输入垂直线的长度")
          AZL (/ AZL 51)
   )
   (repeat 20                              ;循环20次
      (if
          (null
             (if(setq p0(getpoint "\n请输入文字插入点: "))
                (progn
                  (setq x0 (car p0)
                        y0 (cadr p0)                              
                        p1 (list (+ x0 (* AZL 5)) (+ y0 (* AZL 1)))
                        p2 (list (- x0 (* AZL 5)) (+ y0 (* AZL 3)))
                        p3 (list (+ x0 (* AZL 5)) (+ y0 (* AZL 5)))
                        p4 (list (- x0 (* AZL 5)) (+ y0 (* AZL 7)))
                        p5 (list (+ x0 (* AZL 5)) (+ y0 (* AZL 9)))
                        p6 (list (- x0 (/ AZL 100)) (+ y0 (* AZL 10)))            
                  )
                  (command "pline" p0 p1 p2 p3 p4 p5 p6 "")
                  (princ)
                )
             )   
            
          )
          (exit)
      )
   )
   (princ)
)

ll_j 发表于 2013-10-24 15:12:46

关闭捕捉试试。

Andyhon 发表于 2013-10-24 15:15:04

... (command "pline" ...
当叫用 Command 时 捕捉设定作用中...

yaker77 发表于 2013-10-24 15:30:38

画线时我是需要捕捉的
帮忙帮到底,怎么设置呢?谢谢

yaker77 发表于 2013-10-24 15:34:54

(command "pline" p0 p1 p2 p3 p4 p5 p6 "")
我需要在画P0的时候开启捕捉,P1-P6时关闭捕捉
怎么弄啊?

yaker77 发表于 2013-10-24 15:47:19

(defun C:AZXD(/ AZLp0 p1 p2 p3 p4 p5 p6 )
    (setq oldsnap (getvar "osmode"));----------------------记住捕捉状态

   
   (setq AZL (getdist"请输入垂直线的长度")
          AZL (/ AZL 51)
   )
   
   (repeat 20                              ;循环20次
      (setvar "osmode" oldsnap);------------------------在你需要时恢复捕捉
      (if
          (null
            
             (if
               
                (setq p0(getpoint "\n请输入文字插入点: "))
               
                (progn

                  (setq x0 (car p0)
                        y0 (cadr p0)                              
                        p1 (list (+ x0 (* AZL 5)) (+ y0 (* AZL 1)))
                        p2 (list (- x0 (* AZL 5)) (+ y0 (* AZL 3)))
                        p3 (list (+ x0 (* AZL 5)) (+ y0 (* AZL 5)))
                        p4 (list (- x0 (* AZL 5)) (+ y0 (* AZL 7)))
                        p5 (list (+ x0 (* AZL 5)) (+ y0 (* AZL 9)))
                        p6 (list (- x0 (/ AZL 100)) (+ y0 (* AZL 10)))            
                  )
                  (setvar "osmode" 0);-------------------程序运行时关掉
                  (command "pline" p0 p1 p2 p3 p4 p5 p6 "")
                  
                  (princ)
                )
             )   
            
          )
          (exit)
      )
   )
   (princ)
   (setvar "osmode" oldsnap);-------------------------在你需要时恢复捕捉
)

yaker77 发表于 2013-10-24 15:47:50

问题已解决,谢谢各位
页: [1]
查看完整版本: 哪位高人帮我看一下这个程序