找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 493|回复: 1

[求助] [LISP程序]:求助,程序出错很奇怪

[复制链接]
发表于 2006-10-5 12:48:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
我编了一个小程序,用来从一个文本文件中读取坐标后绘出地形线,然后给地形线带地质帽子,求出填挖方的面积。
运行时发现,在程序代码中(repeat……)的这一段,repeat内的内容用手工一次次加载没有问题,但如果是把(repeat……)这一段加载就出错,我已经查了五天了,一直解决不了。恳请各位大侠帮忙。
(defun c:tf ()
  (VL-LOAD-COM)
  (setq        AcadObject   (vlax-get-acad-object)
        AcadDocument (vla-get-ActiveDocument AcadObject)
        mSpace             (vla-get-ModelSpace AcadDocument)
  )
  (setq ffn (getfiled "选取文件" "" "txt" 2))
  (setq        ffn2 (getfiled "选取文件" "" "txt" 1)
  )
  (setq gc1 (getreal "帽子底高程"))
  (setq os (getvar "osmode"))
  (setvar "osmode" 2)
  (setq mzzd (getpoint "帽子中心点"))
  (setvar "osmode" 0)
  (setq jzd (list 0 gc1))
  (command "copy" mzzd "" mzzd jzd)
    
  (setq ent2 (entlast))

  (setq ax_ent_2 (vlax-ename->vla-object ent2))

  (setq ff (open ffn "r"))
  (setq ff2 (open ffn2 "a"))
  (setq data (read-line ff))
  (setq        n 0
        p 0
  )
  (while data
    (setq n (+ 1 n))
    (setq p1 (read data))
    (princ p1)
    (print)
    (setq data (read-line ff))
  )
  (close ff)
  (princ n)
  (setq xcs (/ n 3))
  (setq ff (open ffn "r"))
  (princ)
  (princ)
  (repeat xcs
    (setq
      y        0
      ptt_list nil
      pttlist nil
      lwlist nil
    )
    (setq data2 (read-line ff))
    (setq p2 (read data2))
    (setq hh (read-line ff))
    (while (read hh)
      (setq len (strlen hh))
      (setq n 0)
      (vl-string-elt hh n)
      (while (/= (vl-string-elt hh n) 32)
        (setq n (+ n 1))
      )
      (setq yy (substr hh 1 (+ n 2)))
      (setq xz (* -1 (read yy)))
      (setq hh (substr hh (+ n 3) len))
      (setq len (strlen hh))
      (setq n 0)
      (vl-string-elt hh n)
      (while (/= (vl-string-elt hh n) 32)
        (setq n (+ n 1))
      )
      (setq yy2 (substr hh 1 (+ n 2)))
      (setq yz (read yy2))
      (setq cc (list xz yz))
      (setq ptt_list
             (append ptt_list
                     (list (cons 10
                                 cc
                           )
                     )
             )
      )

      (setq hh (substr hh (+ n 3) len))
      (read hh)
    )
    (setq ptt_list (reverse ptt_list))
    (setq h 0)
    (repeat (- (length ptt_list) 1)
      (setq pttlist
                    (append pttlist
                            (list (nth h ptt_list))

                    )
            h            (+ 1 h)
      )
    )
    (setq hh (read-line ff))
    (while (read hh)
      (setq len (strlen hh))
      (setq n 0)
      (vl-string-elt hh n)
      (while (/= (vl-string-elt hh n) 32)
        (setq n (+ n 1))
      )
      (setq yy (substr hh 1 (+ n 2)))
      (setq xz (read yy))
      (setq hh (substr hh (+ n 3) len))
      (setq len (strlen hh))
      (setq n 0)
      (vl-string-elt hh n)
      (while (/= (vl-string-elt hh n) 32)
        (setq n (+ n 1))
      )
      (setq yy2 (substr hh 1 (+ n 2)))
      (setq yz (read yy2))
      (setq cc (list xz yz))
      (setq pttlist
             (append pttlist
                     (list (cons 10
                                 cc
                           )
                     )
             )
      )
      (setq hh (substr hh (+ n 3) len))
      (read hh)
    )
    (setq lwlist (append lwlist (list (cons 0 "LWPOLYLINE"))))
    (setq lwlist (append lwlist (list (cons 100 "AcDbEntity"))))
    (setq lwlist (append lwlist (list (cons 67 0))))
    (setq lwlist (append lwlist (list (cons 410 "Model"))))
    (if        (/= nil lwplltype)
      (setq lwlist (append lwlist (list (cons 6 lwplltype))))
    )
    (setq lwlist (append lwlist (list (cons 8 "bylayer"))))
    (setq lwlist (append lwlist (list (cons 100 "AcDbPolyline"))))
    (setq lwlist (append lwlist (list (cons 90 (length pttlist)))))
    (setq lwlist (append lwlist (list (cons 70 0))))
    (repeat (length pttlist)
      (setq lwlist
             (append lwlist
                     (list (nth y pttlist))

             )
      )
      (setq lwlist (append lwlist (list (cons 40 0.0))))
      (setq lwlist (append lwlist (list (cons 41 0.0))))
      (setq lwlist (append lwlist (list (cons 42 0.0))))
      (setq y (+ 1 y))
    )
    (setq lwlist (append lwlist (list (cons 210 (list 0.0 0.0 1.0)))))
    (if        (/= lwplkzsx nil)
      (setq lwlist (append lwlist (list (cons -3 (list lwplkzsx)))))
    )
    (entmake lwlist)
    (princ)
    (princ)      
    (setq ent1 (entlast))
    (princ)
    (princ)  
    (setq ax_ent_1 (vlax-ename->vla-object ent1))
    (setq intpoints (vla-intersectwith ax_ent_1 ax_ent_2 acextendnone))
    (setq intpoints (vlax-variant-value intpoints))
    (setq j 0)
    (setq ds (/        (+ 1
                   (- (vlax-safearray-get-u-bound intpoints 1)
                      (vlax-safearray-get-l-bound intpoints 1)
                   )
                )
                3
             )
    )
    (setq tf 0
          wf 0
    )
    (repeat (- ds 1)
      (setq x1 (vlax-safearray-get-element intpoints j)
            x2 (vlax-safearray-get-element intpoints (+ 3 j))
      )
      (setq zxd (list (/ (+ x1 x2) 2) 0))
      (command "xline" "v" zxd "")
      (setq ent_3 (entlast))
      (setq ax_ent_3 (vlax-ename->vla-object ent_3))
      (setq intpoints1
             (vla-intersectwith ax_ent_1 ax_ent_3 acextendnone)
      )
      (setq intpoints1 (vlax-variant-value intpoints1))
      (setq y1 (vlax-safearray-get-element intpoints1 1))
      (setq intpoints2
             (vla-intersectwith ax_ent_2 ax_ent_3 acextendnone)
      )
      (setq intpoints2 (vlax-variant-value intpoints2))
      (setq y2 (vlax-safearray-get-element intpoints2 1))
      (vla-delete ax_ent_3)
      (setq zkd (list (/ (+ x1 x2) 2) (/ (+ y1 y2) 2)))
      (command "bpoly" zkd "")
      (setq en (entlast))
      (command "area" "o" en)
      (setq mj 0)
      (setq mj (getvar "area"))
      (if
        (< y1 y2)
         (setq tf (+ mj tf))
         (setq wf (+ mj wf))
      )

      (entdel en)
      (setq j (+ j 3))
    )
    (vla-delete ax_ent_1)
    (setq p (+ p 1))
    (princ (strcat "第" (rtos p 2) "断面面积为:") ff2)
    (princ "\n" ff2)
    (princ (strcat "填方=" (rtos tf 2)) ff2)
    (princ "\n" ff2)
    (princ (strcat "挖方=" (rtos wf 2)) ff2)
    (princ "\n" ff2)
    (princ)     
  )
  (vla-delete ax_ent_2)
  (close ff)
  (close ff2)
  (setvar "osmode" os)
)
附件为文本文件
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
 楼主| 发表于 2006-10-5 12:57:07 | 显示全部楼层
恳请各位帮忙,我实在想不出来了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-18 06:29 , Processed in 0.362441 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表