明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1897|回复: 5

请教大侠,这个程序返回的点表如何才能按格式写入.tst中啊?

[复制链接]
发表于 2003-4-5 10:37:00 | 显示全部楼层 |阅读模式
请教大侠,下面这个程序(附在最后)可以返回三维立方体顶点坐标的表(内有多层括号)。写入。tst后格式为:
各顶点原始坐标如下
(((262.959 96.1672 54.1167) (262.959 96.1672 0.0)) ((262.959 198.149 0.0) (262.959 96.1672 0.0)) ((262.959 96.1672 54.1167) (262.959 198.149 54.1167)) ((262.959 198.149 54.1167) (262.959 198.149 0.0)) ((148.279 198.149 0.0) (262.959 198.149 0.0)) ((262.959 198.149 54.1167) (148.279 198.149 54.1167)) ((148.279 198.149 54.1167) (148.279 198.149 0.0)) ((148.279 96.1672 0.0) (148.279 198.149 0.0)) ((148.279 198.149 54.1167) (148.279 96.1672 54.1167)) ((148.279 96.1672 54.1167) (148.279 96.1672 0.0)) ((262.959 96.1672 0.0) (148.279 96.1672 0.0)) ((148.279 96.1672 54.1167) (262.959 96.1672 54.1167)))


但如何处理才能让返回的点表写入。tst的格式如下呢?(即隔一个子表就换行)
各顶点原始坐标如下
(((262.959 96.1672 54.1167) (262.959 96.1672 0.0))
((262.959 198.149 0.0) (262.959 96.1672 0.0))
((262.959 96.1672 54.1167) (262.959 198.149 54.1167))
((262.959 198.149 54.1167) (262.959 198.149 0.0))
((148.279 198.149 0.0) (262.959 198.149 0.0))
((262.959 198.149 54.1167) (148.279 198.149 54.1167))
((148.279 198.149 54.1167) (148.279 198.149 0.0))
((148.279 96.1672 0.0) (148.279 198.149 0.0))
((148.279 198.149 54.1167) (148.279 96.1672 54.1167))
((148.279 96.1672 54.1167) (148.279 96.1672 0.0))
((262.959 96.1672 0.0) (148.279 96.1672 0.0))
((148.279 96.1672 54.1167) (262.959 96.1672 54.1167)))



  
  ;;注意:只处理"polyline,line,lwpolyline,3dface,region"直线,含ARC的线不理
  ;;龙大侠提供;;


(defun C:TT (/ SS SS1 N N1 NN ENT CHECK TMP PT_LIST)

  (defun DO_IT (TMP)
    (if
      (and
(not (equal (car TMP) (cadr TMP)))
(= (vl-position TMP PT_LIST) NIL)
(= (vl-position (list (cadr TMP) (car TMP)) PT_LIST) NIL)
      )
       (setq PT_LIST (append PT_LIST (list TMP)))
    )
  )

  (defun DO_IT1 (ENT / TMP)
    (setq TMP (list (cdr (assoc 10 ENT))
    (cdr (assoc 11 ENT))
      )
    )
    (DO_IT TMP)
  )

  (setq SS (ssget '((0 . "polyline,line,lwpolyline,3dface,region"))))
  (setq PT_LIST '())
  (setq N 0)
  (repeat (sslength SS)
    (setq ENT (ssname SS N))
    (setq CHECK (cdr (assoc 100 (reverse (entget ENT)))))
    (cond
      ((or (= CHECK "AcDbPolygonMesh") (= CHECK "AcDbFace"))
       (if (= CHECK "AcDbPolygonMesh")
(progn
   (command "_.COPY" ENT "" "0,0" "@")
   (command "_.EXPLODE" (entlast))
   (setq SS1 (ssget ""))
)
(progn (setq SS1 (ssadd)) (ssadd ENT SS1))
       )
       (setq N1 0)
       (repeat (sslength SS1)
(setq ENT (entget (ssname SS1 N1)))
(setq NN 0)
(setq LINE0 (list (cdr (assoc 10 ENT))
   (cdr (assoc 11 ENT))
     )
       LINE1 (list (cdr (assoc 11 ENT))
   (cdr (assoc 12 ENT))
     )
       LINE2 (list (cdr (assoc 12 ENT))
   (cdr (assoc 13 ENT))
     )
       LINE3 (list (cdr (assoc 13 ENT))
   (cdr (assoc 10 ENT))
     )
)
(repeat 4
   (setq TMP (eval (read (strcat "LINE" (rtos NN)))))
   (DO_IT TMP)
   (setq NN (1+ NN))
)
(setq N1 (1+ N1))
       )
       (command "_.ERASE" SS1 "")
      )
      ((or (= CHECK "AcDb3dPolyline")
   (= CHECK "AcDb2dPolyline")
   (= CHECK "AcDbPolyline")
   (= CHECK "AcDbModelerGeometry")
       )
       (command "_.COPY" ENT "" "0,0" "@")
       (command "_.EXPLODE" (entlast))
       (setq SS1 (ssget ""))
       (setq N1 0)
       (repeat (sslength SS1)
(setq ENT (ssname SS1 N1))
(DO_IT1 (entget ENT))
(setq N1 (1+ N1))
       )
       (command "_.ERASE" SS1 "")
      )
      (t
       (DO_IT1 (entget ENT))
      )
    )
    (setq N (1+ N))
   
  (princ "\n")
    )
  
  
  (setq f (open "e:\\new.tst" "w"))
  (write-line (strcat "各顶点原始坐标如下\n" (vl-princ-to-string PT_LIST))  f)
  (close f)
  
  )
发表于 2003-4-8 10:19:00 | 显示全部楼层

WRITE-FILE ....

(defun WRITE-FILE (PT_LIST / F)               
  (setq F (open "c:\\new.txt" "w"))
  (write-line "各顶点原始坐标如下:" F)
  ;|
;;方法1
  (while (setq TMP (car PT_LIST))
    (write-line (vl-princ-to-string TMP) F)
    (setq PT_LIST (cdr PT_LIST))
  )
  ;;方法2
  (setq N 0)
  (repeat (length PT_LIST)
    (write-line (vl-princ-to-string (nth N PT_LIST)) F)
    (setq N (1+ N))
  )
  ;;方法3
  (foreach PT PT_LIST
    (write-line (vl-princ-to-string PT) F)
  )
  |;
  ;;方法4
  (mapcar '(lambda (X) (write-line (vl-princ-to-string X) F))
          PT_LIST
  )
  (close F)
  (princ)
)
 楼主| 发表于 2003-4-9 21:21:00 | 显示全部楼层

多谢龙大侠了,我试试先!

发表于 2004-11-20 19:00:00 | 显示全部楼层
龙哥我的表是这样的:


(("aaa         IS         SWAYWOOD" ("asfgda8" . 2) ("asfg" . 1))("Administrator         IS         SWAYWOOD" ("swsw" . 1)))


怎么才能实现写入文本文件后是如下的:


("aaa         IS         SWAYWOOD" ("asfgda8" . 2) ("asfg" . 1))


("Administrator         IS         SWAYWOOD" ("swsw" . 1))


引号不能去掉,prin1可以直接写,但好像无法换行
发表于 2004-11-22 10:56:00 | 显示全部楼层
(defun C:TT (/ F)
(setq LST '(("aaa IS SWAYWOOD" ("asfgda8" . 2) ("asfg" . 1))
("Administrator IS SWAYWOOD" ("swsw" . 1))
)
)
(setq F (open "c:\\new.txt" "w"))
(mapcar '(lambda (X) (write-line (vl-prin1-to-string X) F))
LST
)
(close F)
(princ)
)
发表于 2004-11-22 12:34:00 | 显示全部楼层
多谢龙哥!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-9-30 04:16 , Processed in 0.160404 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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