明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: dwgplt

[求助]请CAD高手帮忙看一下,这个LISP程序为什么在R14下无法用?

  [复制链接]
 楼主| 发表于 2002-10-21 22:22:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 发表于 2002-10-21 22:25:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2002-10-22 08:20:00 | 显示全部楼层

程序能把线打断,但因没有阀门图面可供测试!!!!!!!!!

从错误信息看来,是加载程序时出错,你先单独加载程序并执行看看。
因我的错误信息只是:
"fm00.dwg": 搜寻路径内找不到档案:
发表于 2002-10-22 23:40:00 | 显示全部楼层

p2,p3的值不对。

p2,p3的值不对,R14中LWPOLYLINE的实体数据与POLYLINE不一样,顶点坐标格式不一样,你打开实体数据看一下就知道了。
 楼主| 发表于 2002-10-24 20:31:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2002-10-25 08:38:00 | 显示全部楼层

好了!!

(defun C:ZF (/ !ZF EN EN1 EM XM ANG LK P1 P2 P3 P4 P5); HOLDPT TMP)
  (setq        KS (getvar "ltscale")
        LK (* 2 KS)
  )
  (setvar "attdia" 0)
  (setvar "cmdecho" 0)
  (setvar "aperture" 3)
  (setvar "pickbox" 3)
  (while (/= !ZF t)
    (princ "\n     ")
    (princ "\n     ")
    (setq EN (entsel "\n选择闸阀插入点:"))
    (initget "Y N")
    (setq XM (getkword "\n画法兰盘吗<Y/N>?"))
    (if        (or (= XM "Y") (= XM "y"))
      (setq LK (* 2.5 KS))
      (setq LK (* 2 KS))
    )
    (if        EN                                ;if1
      (progn
        (setq EM (entget (car EN)))        ;progn1

        ;|
        ;;增加一段把LWPOLYLINE转POLYLINE程序
        ;;-----------------------------------------------------------------------
        (if (= (cdr (assoc 0 EM)) "LWPOLYLINE")
          (progn
            (setq HOLDPT (getvar "LINETYPE"))
            (setvar "LINETYPE" 0)
            (command "_.EXPLODE" (car EN))
            (setq TMP (ssget ""))
            (command "_.PEDIT" (ssname TMP 0) "" "J" TMP "" "")
            (setq EN (nentselp (cadr EN)))
            (setvar "LINETYPE" HOLDPT)
          )
        )
        ;;-----------------------------------------------------------------------
        |;

        ;;改用CONVERTPOLY把LWPOLYLINE转POLYLINE程序        
        (if (= (cdr (assoc 0 EM)) "LWPOLYLINE")
          (progn
            (command "_.CONVERTPOLY" "H" (car EN) "")
            (setq EM (entget (car EN)))
          )
        )
        ;;----------------------------------------------

        (if (or        (= (cdr (assoc 0 EM)) "OLYLINE") ;if2
                (= (cdr (assoc 0 EM)) "LINE")
            )
          (progn                        ;progn2
            (if        (= (cdr (assoc 0 EM)) "OLYLINE")
              (progn
                (setq P2 (cdr
                           (assoc 10 (entget (setq EN1 (entnext (car EN)))))
                         )
                      P3 (cdr (assoc 10 (entget (entnext EN1))))
                )
              )
              (progn
                (setq P2 (cdr (assoc 10 (entget (car EN))))
                      P3 (cdr (assoc 11 (entget (car EN))))
                )
              )
            )
            (if        (>= (distance P2 P3) (* 4 KS)) ;if3
              (progn                        ;progn3
                (setq ANG (angle P2 P3)
                      P1  (osnap (cadr EN) "NEAREST")
                      P4  (polar P1 ANG LK)
                      P5  (polar P1 (+ ANG pi) LK)
                      ANG (* ANG (/ 180 pi))
                )
                (command "break" P1 "f" P4 P5)
                (if (= LK (* 2.5 KS))
                  (cond
                    ((and (> ANG 22.5) (< ANG 67.5))
                     (command "insert" "c:/dwg/fm00" P4        KS "" ""
                              "insert" "c:/dwg/fm00" P5        KS "" ""
                             )
                    )
                    ((and (> ANG 202.5) (< ANG 247.5))
                     (command "insert" "c:/dwg/fm00" P4        KS "" ""
                              "insert" "c:/dwg/fm00" P5        KS "" ""
                             )
                    )
                    (t
                     (command "insert" "c:/dwg/fm00" P4        KS "" ANG
                              "insert" "c:/dwg/fm00" P5        KS "" ANG
                             )
                    )
                  )                        ;cond end
                )
                (cond
                  ((and (> ANG 22.5) (< ANG 67.5))
                   (command "insert" "c:dwg/fm02" P1 KS "" "" "")
                  )
                  ((and (> ANG 202.5) (< ANG 247.5))
                   (command "insert" "c:/dwg/fm02" P1 KS "" "" "")
                  )
                  (t (command "insert" "c:/dwg/fm01" P1 KS "" ANG ""))
                )                        ;cond end
              )                                ;progn3 end
            )                                ;if3 end
          )                                ;progn2 end
        )                                ;if2 end
      )                                        ;progn1 end
      (setq !ZF t)
    )                                        ;if1 end
    (setvar "aperture" 10)
  )                                        ;while end
  (grtext)
)
发表于 2002-10-25 17:07:00 | 显示全部楼层

(setq en (entsel "\n选择闸阀插入点:")) 这句有问题.

应用getpoint得到点,entsel是获取一个实体.
 楼主| 发表于 2002-10-25 22:17:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2013-4-27 14:10:18 | 显示全部楼层
龙龙仔 发表于 2002-10-25 08:38
(defun C:ZF (/ !ZF EN EN1 EM XM ANG LK P1 P2 P3 P4 P5); HOLDPT TMP)
  (setq        KS (getvar "ltscale")
...

龙大,我试了一下,一直提示找不到图,但我自己试着画了一个图放在那里了,也设置了支持路径
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-30 12:13 , Processed in 0.170641 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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