明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4281|回复: 16

***lisp与DCL文件的衔接***已解决,感谢ZZXXQQ斑竹帮忙

  [复制链接]
发表于 2008-4-21 20:06:00 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2008-5-1 12:08:26 编辑

LISP是麻烦坛里的弟兄编的,稍加了点信息.对话框是自己编的,请大家将LISP与DCL衔接,实现功能如下:

1."起始号","外径","节数","弯模"是由用户填写,且下次显示时默认上次输入的值.

2.点击"选择"时关闭对话框,由用户选择多义线,选完点鼠标右键恢复对话框,将要保存的信息显示在"LIST"中

3.如果用户点"继续选择"时关闭对话框,由用户选择多义线,选完点鼠标右键恢复对话框,将新选的数据叠加到之前的数据中

4.如果用户二次点"选择"时关闭对话框,由用户选择多义线,选完点鼠标右键恢复对话框,将新选的数据替换原有数据

5.用户点"保存数据",出现"浏览"对话框,由用户指定文件保存路径.

6."确定"--文件输出,"取消"--退出程序

对话框文件:

getdata : dialog {
                  label = "提取多义线顶点坐标";
                  : boxed_column {
                                  label = "列表";
                                   : list_box {
                                               key = "list";
                                               width = 20;
                                               height = 20;
                                              }
                                   : column {
                                             : row {
                                                    : edit_box {
                                                                label = "起始号:";
                                                                key = "P";               
                                                                edit_width = 3;
                                                               }  
                                                    : edit_box {
                                                                label = "  外  径:";
                                                                key = "D";               
                                                                edit_width = 6;
                                                               }
                                                    : row {
                                                           : edit_box {
                                                                       label = "  分:";
                                                                       key = "N";
                                                                       edit_width = 3;
                                                                      }
                                                           : text {
                                                                   label = "节";
                                                                  }
                                                          }
                                                    : edit_box {
                                                                label = "  弯  模:";
                                                                key = "R";               
                                                                edit_width = 6;
                                                               }
                                                   }
                                             }
           
                                  }
                 :row {
                       :retirement_button
                                   {
                                    label = "选择..";
                                    key = "xz";
                                   }
                       :retirement_button
                                   {
                                    label = "继续选择..";
                                    key = "jxxz";
                                   }
                       :retirement_button
                                   {
                                    label = "保存数据..";
                                    key = "bcsj";
                                   }
                        ok_cancel;
                     }
               }


LISP文件:

(DEFUN C:getdata (/     SST   H  fi    N     I    J  K     p
        NAME  DXF   TYPE_LINE   XY_COUNT    F  x     y
        PT1   D    N1 R
       )
  (setq fi '((0 . "*POLYLINE"))) 
  (setq F (getfiled "写出文件" "" "pxt" 1))
  (SETQ F (OPEN F "w"))
  (command "_layer" "off" "pipesolid" "")
  (command "_layer" "ON" "pipeline" "")
  (PROMPT " \n选多义线:")
  (SETQ SST (SSGET fi))
  (SETQ J 0)
  (setq k 0)
  (setq p (getint " \n序号<1>:"))
  (IF (= P nil)
    (setq p 1)
  )
  (setq D (getint " \n外径<508>:"))
  (IF (= nil D)
    (setq D 508)
  )
  (setq R (getint " \n弯模<500>:"))
  (IF (= nil R)
    (setq R 500)
  )
  (setq N1 (getint " \n分几节<4>:"))
  (IF (= nil N1)
    (setq N1 4)
  )
  (REPEAT (SSLENGTH SST)
    (SETQ NAME (SSNAME SST J))
    (SETQ J (1+ J))
    (SETQ DXF (ENTGET NAME))
    (SETQ TYPE_LINE (CDR (ASSOC 0 DXF)))
    (SETQ XY_COUNT (EVAL (READ (STRCAT "(" TYPE_LINE " DXF NAME)"))))
    (setq i (length xy_count))
    (setq k 0)
    (princ "\n" f)
    (princ p f)
    (princ "," f)
    (princ D f)
    (princ "," f)
    (princ R f)
    (princ "," f)
    (princ N1 f)
    (princ "," f)
    (repeat i
      (setq y (nth k xy_count))
      (setq h (nth 2 y))
      (setq x (nth 1 y))
      (setq y (nth 0 y))
      (setq y (strcat (IF (> k 0)
   ","
   ""
        )
        (rtos Y 2 3)
        ","
        (rtos X 2 3)
        ","
        (rtos h 2 3)
       )
      )
      (princ y f)
      (setq k (1+ k))
    )
    (setq p (1+ p))
  )
  (close f) 
  (prompt  (strcat "\n管子数据已经输出完毕;共保存<"(itoa (- P 1))">根管"))
  (command "_layer" "on" "pipesolid" "")
  (command "_layer" "off" "pipeline" "")
  (princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun POLYLINE (DXF E1 / XY E2 count_xy pd)
  (setq count_xy nil)
  (SETQ DXF (MEMBER (ASSOC 330 DXF) DXF))
  (SETQ E2 (ENTNEXT E1))
  (SETQ DXF (ENTGET E2))
  (setq e1 (cdr (assoc 0 dxf)))
  (while (= e1 "VERTEX")
    (setq e1 (cdr (assoc 10 dxf)))
    (setq pd (cdr (assoc 70 dxf)))
    (if (/= pd 16)
      (setq count_xy (cons e1 count_xy))
    )
    (setq e1 e2)
    (SETQ E2 (ENTNEXT E1))
    (SETQ DXF (ENTGET E2))
    (setq e1 (cdr (assoc 0 dxf)))
  )
  (setq COUNT_XY (reverse count_xy))
)

谢谢

发表于 2021-2-14 11:59:24 | 显示全部楼层
路过看看,学习学习
 楼主| 发表于 2008-4-24 22:16:00 | 显示全部楼层

麻烦大家务必出手相助啊,拜托了

 楼主| 发表于 2008-4-27 11:08:00 | 显示全部楼层

怎么没人回帖啊....................................................

发表于 2008-4-27 11:18:00 | 显示全部楼层
列表框中数据什么格式?
 楼主| 发表于 2008-4-28 01:21:00 | 显示全部楼层

谢谢ZZXXQQ斑竹的回复,

"列表框中数据"其实就是即将写入*.PXT中的数据,也就是希望预览*.PXT数据以便及时核对和修改数据.

谢谢

 楼主| 发表于 2008-4-29 00:34:00 | 显示全部楼层

假如大家觉得实现预览*.PXT数据这个功能太麻烦,可以不要了,求大家帮助实现其他功能吧.....

 楼主| 发表于 2008-4-29 23:37:00 | 显示全部楼层
决心继续求助,直到解决为止.....
发表于 2008-4-30 19:44:00 | 显示全部楼层
本帖最后由 作者 于 2008-5-1 9:43:08 编辑

再试试看
游客,本帖隐藏的内容需要发帖数高于 10 才可浏览,你当前发帖数只有 0

发表于 2008-4-30 21:25:00 | 显示全部楼层

ZZXXQQ

you have two down son

 楼主| 发表于 2008-4-30 22:48:00 | 显示全部楼层

感谢ZZXXQQ斑竹,发现你的程序有如下问题:

1.提取出的多段线"序号"不会自动"+1",输入1就一直提取1

2.初次选完多段线后点"继续选择"是将新选数据叠加到前面数据后

3.初次选完多段线后再点"选择"是将新选数据替换前面数据(即将前面数据清空后再输入新选数据)

4.希望将"保存数据"与"确定"功能合二为一

诚心期待你的方案.谢谢

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

本版积分规则

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

GMT+8, 2025-5-17 07:18 , Processed in 0.218432 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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