明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2255|回复: 4

[求助]dwg2shp

[复制链接]
发表于 2006-8-2 19:42:00 | 显示全部楼层 |阅读模式

明经网站上有一个dwg转shp字体的软件,不知为何,不能下载。

大家有没有这个软件阿?传我一份,谢谢,最好有专家写成lisp,我学习一下。

如有,麻烦发至hwang21@163.com,如果是exe文件,记得压缩一下,或者改扩展名,我的邮箱不允许发送接受可执行文件,会识别为病毒。

 楼主| 发表于 2006-8-4 20:20:00 | 显示全部楼层

怎么没有人帮我?没有人有这个小软件吗?

顶上去,沉下去更没有希望了

发表于 2006-8-4 21:43:00 | 显示全部楼层
  1.   
  2. ;  ###############################################################
  3. ;  ##  图形转换到形文件  功能软件  3.0  版      DWG-SHP.LSP    ##
  4. ;  ##  适用于 AutoCAD R13  以上版                               ##
  5. ;  ##  可转换的实体类型: 直线 _________ Line                    ##
  6. ;  ##                    圆弧 _________ Arc                     ##
  7. ;  ##                    圆 ___________ Circle                  ##
  8. ;  ##                                                           ##
  9. ;  ##  限制条件: 1> 每个端点都应尽量落在 1mm 的隐含网格上       ##
  10. ;  ##            2> 同一实体的两个相邻点 X,Y 位移小于 127mm     ##
  11. ;  ##            3> 直线中大于 127mm 的部分应分为 127mm 的几段  ##
  12. ;  ##            4> 大于半圆的弧应分两段绘成,  半径应是整数     ##
  13. ;  ##            5> 尽量少用 Arc,非用不可,应在最后绘成 ,      ##
  14. ;  ###############################################################
  15. ;-- ERROR 错误中断处理 --------------------------------------------
  16. (Defun CPrint (ipl / in)
  17.        (SetQ in 0)
  18.        (While (SetQ ipa (Nth in ipl))
  19.               (If (= 'REL (Type ipa)) (PrinC (RToS ipa)) (PrinC ipa))
  20.               (SetQ in (1+ in))
  21.        )
  22.        (PrinC)
  23. )
  24. (Defun Error (ex2 ey2 ex1 ey1 est / ea exx eyy)
  25.        (SetQ ea (Angle (List ex1 ey1) (List ex2 ey2))
  26.             exx (* 4 (Sin ea)) eyy (* 4 (Cos ea))
  27.        )
  28.        (GrDraw (List ex1 ey1) (List (- ex2 exx)(+ ey2 eyy)) 1 1)
  29.        (GrDraw (List (- ex2 exx)(+ ey2 eyy))
  30.                (List (+ ex2 exx)(- ey2 eyy)) 1 1)
  31.        (GrDraw (List (+ ex2 exx)(- ey2 eyy))(List ex1 ey1) 1 1)
  32.        (If (/= nil ofn3) (Close ofn3))
  33.        (If (/= nil ofn2) (Close ofn2))
  34.        (If (/= nil ofn1) (Close ofn1))
  35.        (Alert (StrCat "\n注意: \n" est "\n请重新修改你的图形,再试一次..."))
  36.        (SetQ ex1 nil ey1 nil ex2 ni ey2 nil)
  37.        (Redraw)(Abcdefg)
  38. )
  39. ;-- 2,8,(dx,dy), 空移的描述和处理 ---------------------------------
  40. (Defun 2-XY()
  41.        (SetQ 2a (Angle (List x0 y0)(List x1 y1))
  42.             2xx (* 2 (Sin 2a)) 2yy (* 2 (Cos 2a))
  43.        )
  44.        (GrDraw (List x1 y1) (List (- x0 2xx)(+ y0 2yy)) 3 1)
  45.        (GrDraw (List (- x0 2xx)(+ y0 2yy))
  46.                (List (+ x0 2xx)(- y0 2yy)) 3 1)
  47.        (GrDraw (List (+ x0 2xx)(- y0 2yy))(List x1 y1) 3 1)
  48.        (SetQ 2dx (- x1 x0) 2dy (- y1 y0) ax (Abs 2dx) ay (Abs 2dy))
  49.        (If (> 0.3 ax)(SetQ ax 0.0))
  50.        (If (> 0.3 ay)(SetQ ay 0.0))
  51.        (If (>= 2dx 0)(SetQ xfh "+")(SetQ xfh "-"))
  52.        (If (>= 2dy 0)(SetQ yfh "+")(SetQ yfh "-"))
  53.        (Cond ((Or (/= 0 2dx)(/= 0 2dy))                ;-> cond1
  54.              (Cond ((Or (> ax 127)(> ay 127))          ;-> cond1-1
  55.                    (Cond ((= ax ay)                    ;-> cond1-2
  56.                           (SetQ dn (RToS (/ ax 127) 2 0)
  57.                                ddd (RToS (rem ax 127) 2 0)
  58.                                sdy (StrCat "2,4," dn
  59.                                            ",8,(" xfh "127," yfh "127,)"
  60.                                            "3," dn
  61.                                            ",8,(" xfh ddd "," yfh ddd "),1,"
  62.                                    )
  63.                               sdyl (+ sdyl 12)
  64.                           )
  65.                           (Write-Line sdy ofn2) (SetQ sdy "")
  66.                          ) ;> ax=ay end
  67.                          ((= ax 0)
  68.                           (SetQ dn (RToS (/ ay 127) 2 0)
  69.                                ddd (RToS (rem ay 127) 2 0)
  70.                                sdy (StrCat "2,4," dn
  71.                                            ",8,(0," yfh "127,)"
  72.                                            "3," dn
  73.                                            ",8,(0," yfh ddd "),1,"
  74.                                    )
  75.                               sdyl (+ sdyl 12)
  76.                           )
  77.                           (Write-Line sdy ofn2) (SetQ sdy "")
  78.                          )  ;> ax=0 end
  79.                          ((= ay 0)
  80.                           (SetQ dn (RToS (/ ax 127) 2 0)
  81.                                ddd (RToS (rem ax 127) 2 0)
  82.                                sdy (StrCat "2,4," dn
  83.                                            ",8,(" xfh "127,0),"
  84.                                            "3," dn
  85.                                            ",8,(" xfh ddd ",0),1,"
  86.                                    )
  87.                               sdyl (+ sdyl 12)
  88.                           )
  89.                           (Write-Line sdy ofn2) (SetQ sdy "")
  90.                          ) ;> ay=0 end
  91.                          (T (Error x0 y0 x1 y1 "距离太长"))
  92.                       )                                 ;> cond1-2 end
  93.                    )                            ;> ax or ay > 127 end
  94.                    (T (SetQ sdy (StrCat "2,8,(" (RToS 2dx 2 0) ","
  95.                                                 (RToS 2dy 2 0) "),1,"
  96.                                 )
  97.                            sdyl (+ sdyl 5)
  98.                       )
  99.                       (Write-Line sdy ofn2)
  100.                    ) ;> ax and ay < 127 end
  101.              )  ;> cond1-1 end
  102.         )) ;> cond1 end
  103. (SetQ 2dx nil 2dy nil ddd nil xfh nil yfh nil))
  104. ;-- ARC 弧实体的转换 ----------------------------------------------
  105. (Defun S-Arc()
  106.        (PrinC "A.")
  107.        (SetQ cr (Cdr (Assoc 40 ent))
  108.               x (Cadr (Assoc 10 ent)) y (Caddr (Assoc 10 ent))
  109.              a1 (Cdr (Assoc 50 ent)) a2 (Cdr (Assoc 51 ent))
  110.             a11 (AToF (angtos a1 0 3)) a22 (AToF (angtos a2 0 3))
  111.              x1 (+ x (* cr (Cos a1))) y1 (+ y (* cr (Sin a1)))
  112.              x2 (+ x (* cr (Cos a2))) y2 (+ y (* cr (Sin a2)))
  113.              dx (- x2 x1) dy (- y2 y1)
  114.        )
  115.        (2-xy)
  116.        (Cond ((And (< (Abs dx) 127.0) (< (Abs dy) 127.0))
  117.              (setq d ( sqrt (+ (* (- x2 x1) (- x2 x1)) (* (- y2 y1) (- y2 y1)) ))
  118.                    h (- cr ( sqrt (- (* cr cr) (* 0.25 d d))))
  119.                    td  (* (/ (* 2.0 H) D) 127.0)
  120.              )
  121.              (setq dx (rtos dx 2 0) dy (rtos dy 2 0) td (rtos td 2 0) )
  122.              (SetQ sdy (StrCat "12," dx "," dy "," td ",")
  123.                   sdyl (+ sdyl 4)
  124.              )
  125.              (Write-Line sdy ofn2)
  126.         ;     (princ sdy)
  127.               (SetQ sdy "" x0 x2 y0 y2)
  128.              );-> cond T end
  129.              (T (Error x1 y1 x2 y2 "弧线太长 <S-Line>"))
  130.        );-> cond end
  131. )
  132. ;-- CIRCLE 圆实体的转换 -------------------------------------------
  133. (Defun S-Circle()
  134.        (PrinC "C.")
  135.        (SetQ cr (Cdr (Assoc 40 ent))
  136.              x1 (+ cr (Cadr (Assoc 10 ent))) y1 (Caddr (Assoc 10 ent))
  137.              cr (RToS cr 2 0)
  138.        )
  139.        (2-XY)
  140.       ; (SetQ sdy (StrCat "4," cr ",7,1,3," cr ",") sdyl (+ sdyl 6))
  141.        (SetQ sdy (StrCat "10," cr ",000," ) sdyl (+ sdyl 3))
  142.        (Write-Line sdy ofn2)(SetQ sdy "" x0 x1 y0 y1 cr nil)
  143. )
  144. ;-- LINE 直线实体的转换 -------------------------------------------
  145. (Defun S-Line()
  146.        (PrinC "L.")
  147.        (SetQ x1 (Cadr (Assoc 10 ent)) y1 (Caddr (Assoc 10 ent))
  148.              x2 (Cadr (Assoc 11 ent)) y2 (Caddr (Assoc 11 ent))
  149.              dx (- x2 x1) dy (- y2 y1)
  150.             ddx (RToS dx 2 0) ddy (RToS dy 2 0)
  151.        )
  152.        (2-XY)
  153.        (Cond ((And (< (Abs dx) 127) (< (Abs dy) 127))
  154.               (SetQ sdy (StrCat "8,(" ddx "," ddy "),") sdyl (+ sdyl 3))
  155.               (Write-Line sdy ofn2)
  156.              ; (princ sdy)
  157.               (SetQ sdy "" x0 x2 y0 y2)
  158.              );-> cond T end
  159.              (T (Error x1 y1 x2 y2 "线太长 <S-Line>"))
  160.        );-> cond end
  161.        (SetQ dx nil dy nil ddx nil ddy nil)
  162. )
  163. ;-- Write to SHP file 填写形文件 ----------------------------------
  164. (Defun Write-SHP()
  165.        (PrinC "\n正在写入形定义源文件...")
  166.        (Close ofn2)(SetQ ofn2 (open sfn2 "r") ofn1 (open sfn1 "a"))
  167.        (SetQ odyl (RToS (1+ sdyl) 2 0) osno (RToS sno 2 0)
  168.              obtl (StrCat "*" osno "," (rtos (+ 4 (atoi odyl)) 2 0) "," sna)
  169.        )
  170.        (Write-Line obtl ofn1)
  171.        (Write-Line "07,1," ofn1)
  172.        (While (SetQ txt (read-line ofn2)) (Write-Line txt ofn1))
  173.        (Write-Line "07,2,0" ofn1)
  174.        ;(Write-Line "0" ofn1)
  175.    ;    (Write-Line sna ofn3)
  176.        (Close ofn1) (Close ofn2) (Close ofn3)
  177.        (SetQ odyl nil odtl nil)
  178. )
  179. ;-- found *.nam file 形名索引的检索处理 & 输入限制 ----------------
  180. (Defun Name-File()
  181.        (SetQ ofn3 (Open sfn3 "r"))
  182.        (While (SetQ rsna (Read-Line ofn3))
  183.               (Cond ((= rsna sna)
  184.                      (PrinC "\n这个形名已经存在了!")
  185.                      (SetQ sna (GetString" 形名: ") sna (StrCase sna))
  186.                      (While (Or (Eq "" sna)(= "SAVE" sna)(= rsna sna))
  187.                             (PrinC "\n请重新起名...")
  188.                             (SetQ sna (GetString" 名: ") sna (StrCase sna))
  189.                      )
  190.                      (Close ofn3)
  191.                      (SetQ ofn3 (Open sfn3 "r"))
  192.                     );-> (= rsna sna)
  193.               ) ;-> cond end
  194.        );-> while end
  195.        (Close ofn3)
  196.        (SetQ ofn3 (Open sfn3 "a"))
  197. )
  198. ;== DWG to SHP 图 --> 形  转换功能的主控段落 ======================
  199. ;(Defun C:DWG-SHP ()
  200. (Defun C:DS ()
  201.       ; (Defun *error* (st) (SetQ *error* nil) (PrinC))
  202.        (SetQ sfn0 (GetString"\n形文件名: "));-> Input Filename
  203.        (While (Eq sfn0 "");-> "RETURN" err
  204.               (SetQ sfn0 (GetString"\n请确定形文件名: "))
  205.        );-> while end
  206.        (SetQ sfn1 (StrCat sfn0 ".SHP")
  207.              sfn2 (StrCat sfn0 ".BAK")
  208.              sfn3 (StrCat sfn0 ".NAM") sdy ""
  209.        )
  210.        (If (SetQ ofn3 (Open sfn3 "r"));-> new or old file
  211.            (Progn (SetQ sno 1)
  212.                   (While (Read-Line ofn3) (SetQ sno (1+ sno)))
  213.                   (PrinC "已有的形定义源文件...")(Close ofn3)
  214.            )
  215.            (Progn (SetQ ofn1 (Open sfn1 "w") ofn3 (Open sfn3 "w"))
  216.                   (Write-Line "C" ofn3)(Close ofn3)
  217.                   (Write-Line "*1,9,C" ofn1)
  218.                   (Write-Line "2,010,1,10,1,000,2,018,0" ofn1)
  219.                   (PrinC "新文件...") (SetQ sno 2)(Close ofn1)
  220.            )
  221.        )
  222.        (CPrint (List "\n形定义 [" sno))
  223.        (SetQ sna (StrCase (GetString"] 名: ")))
  224.        (While (Eq "" sna)
  225.               (SetQ sna (StrCase (GetString" 请输入形定义名: ")))
  226.        )
  227.        (While (And (/= "SAVE" sna)(> 255 sno));-> big while start
  228.               (SetQ ofn2 (Open sfn2 "w") sdyl 0)
  229.               (Name-File)
  230.               (SetQ ;inp (getpoint"\n插入基点: ")
  231.                      x0 (Car inp) y0 (Cadr inp) inp nil
  232.                      x0 0  y0 0
  233.               )
  234.               (PrinC "\n请选定要转换成形定义的图线 ...")
  235.               (SetQ ss (ssget))
  236.               (If (/= nil ss) (SetQ ssn (sslength ss)) (SetQ ssn 0))
  237.               (While (Or (Eq nil ss) (> ssn 1200))
  238.                      (PrinC "\n所选的图线个数是 ")
  239.                      (PrinC (RToS ssn 2 0))
  240.                      (PrinC "\n但是,图线数量限制在 1到 100之间!<dwg-shp>")
  241.                      (SetQ ss (ssget))
  242.                      (If (/= nil ss) (SetQ ssn (sslength ss)) (SetQ ssn 0))
  243.               )
  244.               (SetQ n (- ssn 1))
  245.               (repeat ssn
  246.                       (SetQ ent (EntGet (ssname ss n))
  247.                           etype (Cdr (Assoc 0 ent))
  248.                       )
  249.                       (Cond ((= etype "LINE")(S-Line))
  250.                             ((= etype "ARC")(S-Arc))
  251.                             ((= etype "CIRCLE")(S-Circle))
  252.                             (T (SetQ errp (Cdr (Assoc 10 ent))
  253.                                      errx (Car errp)
  254.                                      erry (Cadr errp)
  255.                                )
  256.                                (Error errx erry (+ errx 10) erry
  257.                                       (StrCat "所指图线中有不能转换的 " etype
  258.                                               "\n 能够转换的对象是:"
  259.                                               " Line、Circle 和 Arc"
  260.                                       )
  261.                                )
  262.                             )
  263.                       )
  264.                       (SetQ n (1- n))
  265.               )
  266.               (SetQ sno (1+ sno))(Write-SHP)
  267.               (PrinC "\nSAVE(存盘)/<形定义[") (PrinC sno)
  268.               (SetQ sna (StrCase (GetString"]名>: ")))
  269.               (While (Eq "" sna)
  270.                      (SetQ sna (StrCase (GetString" 请输入形定义名: ")))
  271.               )
  272.        );-> big while end
  273.        (PrinC "\n形文件: ")(PrinC (StrCase sfn0))
  274.        (PrinC ".SHP 已经存好了。")
  275.        (PrinC "\n感谢您使用我的程序,再见!")
  276.        (PrinC)
  277. )
  278. ;== By Chen Bo xiong =========================================================
 楼主| 发表于 2006-8-5 10:19:00 | 显示全部楼层
谢谢,很好用
发表于 2008-12-14 09:21:00 | 显示全部楼层

如题。就是如何使用lsp将dwg文件中的实体坐标写到txt文件中,然后将经过平常以后的txt中的实体坐标写入到dwg文件中。

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

本版积分规则

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

GMT+8, 2025-7-30 05:29 , Processed in 0.195798 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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