明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 10472|回复: 13

求dwg/dxf转shp的程序或LISP

  [复制链接]
发表于 2008-9-11 21:11:00 | 显示全部楼层 |阅读模式
求dwg/dxf转shp的程序或LISP,
发表于 2010-7-19 16:29:00 | 显示全部楼层
下面的程序就可以!
  1. (defun C:MakeShape(/ f1 CT)
  2.   (defun ShapeName (sfn / ofn n k k1 zc$ zc1$ spn zs ID_shape)
  3.   (setq ofn (open sfn "r") n 0 ID_Shape '())
  4.   (while (setq zc$ (read-line ofn))
  5.     (if (eq (substr zc$ 1 1) "*")
  6.       (progn
  7. (setq n (1+ n) k (strlen zc$) k1 1 spn "" dh 0)
  8. (repeat k
  9.    (setq zc1$ (substr zc$ k1 1))
  10.    (if (= zc1$ ";") (setq zs T zc1$ ""))
  11.    (if (< dh 2)
  12.      (if (eq "," zc1$) (setq dh (1+ dh)))
  13.             (if zs
  14.        ()
  15.        (setq spn (strcat spn zc1$))
  16.        )
  17.      );if
  18.    (setq k1 (1+ k1))
  19.    );repeat
  20. (if (/= "" spn) (setq ID_Shape (cons spn ID_Shape)))
  21. );progn
  22.       );if
  23.     );while
  24.   (close ofn)
  25.   (setq ID_Shape (reverse ID_Shape))
  26.   )
  27.   ;(setIerr)
  28.   (setq CT T)
  29.   (while (not (setq fina1 (getfiled "形文件名" "" "shp" 1)))
  30.         (abcdefg)
  31.      )
  32.     (if (setq f1 (open fina1 "r"))
  33. (progn
  34.     (setq ID_Shape (shapeName fina1))
  35.     (close f1)
  36.     );progn
  37.     (setq ID_Shape '())
  38.     );if
  39. (setq fs (open fina1 "a"))
  40.   (while Ct
  41.     (setq su (1+ (length ID_SHAPE)))
  42. ; (princ su)
  43. ;(princ (strcat "\nNumber = " (itoa su)))
  44.   (while (= "" (setq fina (strcase (getstring "\n请输入拟生成的形名 : "))))
  45.          (alert "\n请输入拟生成的形名 : ")
  46.       )
  47.   (while (member fina ID_Shape)
  48.     (PrinC "\n这个形名已经存在了!")
  49.       (while (= "" (setq fina (strcase (getstring "\n请重新起名..."))))
  50.          (alert "\n请输入拟生成的形名 : ")
  51.       )
  52.     )
  53.   (setq ID_SHAPE (cons fina ID_SHAPE))
  54.   (if (> (length ID_SHAPE) 255) (abcdefg))
  55.   
  56.   ;|(while (not (setq su (getint "\n请输入拟生成的形文件编号(1 - 255) :")))
  57.          (alert "\n请输入拟生成的形文件编号(1 - 255) :")
  58.        )
  59.        |;
  60.   (setq fst nil snd nil k 0 p1 nil)
  61.   (setq fst (getpoint "\n请输入欲生成形文件的图形区域的一个角点 : "))
  62.   (setq snd (getcorner fst "\n请输入欲生成形文件的图形区域的另一个角点 : "))
  63.   (initget 7 "Yes No  ")
  64.   (setq a$ (strcase (getKword "\n坐标值为整数吗?(Yes/No)<N>")))
  65.   (if (= a$ "") (setq a$ "No"))
  66.   (if (= a$ "Yes")
  67.     (setq k1$ 125)
  68.     (progn
  69.       (setq k$ (distance fst snd))
  70.       (setq p1 (getpoint "\n最长图形目标的一个端点 :"))
  71.       (if (/= p1 nil)
  72.               (setq k1$ (getdist p1 "\n最长图形目标的另一个端点 :"))
  73.               (setq k1$ k$)
  74. )
  75.       )
  76.     )
  77.   (setq dd$ (fix (/ 125 k1$)))
  78.   (setq dd$ (if (= dd$ 0) 1 dd$))
  79.   (if (> dd$ 125) (setq dd$ 125))
  80.   (setq a (ssget "c" fst snd))
  81.   (setq count 3)
  82.   (setq nu (sslength a))
  83.   (while (< k nu)
  84.     (setq enta (entget (ssname a k)))
  85.     (setq b$ (cdr (assoc 0 enta)))
  86.     (if (or (= b$ "POLYLINE") (= b$ "LWPOLYLINE"))
  87.       (explo)
  88.       (if (= b$ "BLOCK")
  89. (explo)
  90. (if (= b$ "INSERT")
  91.    (explo)
  92.    )
  93. )
  94.       )
  95.     (setq k (1+ k))
  96.     )
  97.   (setq k 0)
  98.   (setq a (ssget "c" fst snd))
  99.   (setq nu (sslength a))
  100.   (while (< k nu)
  101.     (setq enta (entget (ssname a k)))
  102.     (setq b$ (cdr (assoc 0 enta)))
  103.     (if (= b$ "LINE")
  104.       (setq count (+ 8 count))
  105.       (if (= b$ "ARC")
  106. (setq count (+ 15 count))
  107. (if (= b$ "VERTEX")
  108.    (setq count (+ 2 count))
  109.    (if (= b$ "CIRCLE")
  110.      (setq count (+ 12 count))
  111.      )
  112.    )
  113. )
  114.       )
  115.     (setq k (1+ k))
  116.     )
  117.   ;(setq fina1 (getfiled "形文件名" "" "shp" 1))
  118. ; (setq fs (open fina1 "a"))
  119.   (setq b$ (strcat "*" (itoa su) "," (itoa count) "," fina))
  120.   (write-line b$ fs)
  121.   (setq a$ (strcat "3," (itoa dd$) ","))
  122.   (write-line a$ fs)
  123.   ;(setq p3 (cdr (assoc 10 (entget (ssname a 0)))))
  124.   (setq p3 (getpoint "\n选择插入基点 :"))
  125.   (setq k 0)
  126.   (while (< k nu)
  127.     (setq e (entget (ssname a k)))
  128.     (setq estr (cdr (assoc 0 e)))
  129.     (if (= estr "LINE")
  130.       (progn
  131. (setq p1 (cdr (assoc 10 e)))
  132. (setq dx1 (fix1 (mul (- (car p1) (car p3)))))
  133. (setq dy1 (fix1 (mul (- (cadr p1) (cadr p3)))))
  134. (setq p2 (cdr (assoc 11 e)))
  135. (setq dx (fix1 (mul (- (car p2) (car p1)))))
  136. (setq dy (fix1 (mul (- (cadr p2) (cadr p1)))))
  137. (setq a$ (strcat "2,8," (itoa dx1) "," (itoa dy1) ","))
  138. (setq b$ (strcat "1,8," (itoa dx) "," (itoa dy) ","))
  139. (setq c$ (strcat a$ b$))
  140. (write-line c$ fs)
  141. (setq p3 p2)
  142. )
  143.       (if (= estr "CIRCLE")
  144. (progn
  145.    (setq p1 (cdr (assoc 10 e)))
  146.    (setq r1 (cdr (assoc 40 e)))
  147.    (setq r (fix (+ 0.5 (mul r1))))
  148.    (setq dx (fix1 (mul (+ r1 (- (car p1) (car p3))))))
  149.    (setq dy (fix1 (mul (- (cadr p1) (cadr p3)))))
  150.    (setq a$ (strcat "2,8," (itoa dx) "," (itoa dy) ","))
  151.    (setq b$ (strcat "1,10,(" (itoa r) ",000),"))
  152.    (setq c$ (strcat "2,8,-" (itoa r) ",0"))
  153.    (write-line (strcat a$ b$ c$) fs)
  154.    (setq p3 p1)
  155.    )
  156. (if (= estr "ARC")
  157.    (progn
  158.      (setq p1 (cdr (assoc 10 e)))
  159.      (setq sa1 (cdr (assoc 50 e)))
  160.      (setq ea1 (cdr (assoc 51 e)))
  161.      (setq r1 (cdr (assoc 40 e)))
  162.      (setq dx (fix1 (mul (+ (* r1 (cos sa1))
  163.        (- (car p1) (car p3))))))
  164.      (setq dy (fix1 (mul (+ (* r1 (sin sa1))
  165.     (- (cadr p1) (cadr p3))))))
  166.      (setq r (fix (+ 0.5 (mul r1))))
  167.      (setq sad (rtd sa1) ead (rtd ea1))
  168.      (setq saa (/ sad 45))
  169.      (setq eaa (/ ead 45))
  170.      (setq sa0 (fix saa) ea0 (fix eaa))
  171.      (setq sa (fix (+ 0.5 (/ (* (rem sad 45) 256) 45))))
  172.      (setq ea (fix (+ 0.5 (/ (* (rem ead 45) 256) 45))))
  173.      (if (= 0 (rem ead 45))
  174.        (setq ea0 (1- ea0))
  175.        )
  176.      (if (= 256 sa)
  177.        (setq sa 0 sa0 (1+ sa0))
  178.        )
  179.      (if (= 256 ea)
  180.        (setq ea 0)
  181.        )
  182.      (if (> sad ead)
  183.        (setq c (+ 9 (- ea0 sa0)))
  184.        (setq c (+ 1 (- ea0 sa0)))
  185.        )
  186.      (if (= 8 sa0) (setq sa0 0))
  187.      (if (> r (* dd$ 255))
  188.        (setq rr r)
  189.        (setq rr 0)
  190.        )
  191.      (setq a$ (strcat "2,8,"
  192.         (itoa dx) ","
  193.         (itoa dy) ","))
  194.      (setq b$ (strcat "1,11,("
  195.         (itoa sa) ","
  196.         (itoa ea) ","
  197.         (itoa rr) ","
  198.         (itoa r) ",0"
  199.         (itoa sa0)
  200.         (itoa c) "),"))
  201.      (setq dx1 (- 0 (fix1 (mul (* r1 (cos ea1))))))
  202.      (setq dy1 (- 0 (fix1 (mul (* r1 (sin ea1))))))
  203.      (setq c$ (strcat "2,8,"
  204.         (itoa dx1) ","
  205.         (itoa dy1) ","))
  206.      (write-line (strcat a$ b$ c$) fs)
  207.      (setq p3 p1)
  208.      )
  209.    )
  210. )
  211.       )
  212.     (setq k (1+ k))
  213.     )
  214.     (write-line "0" fs)
  215.     (initget 7 "Yes No  ")
  216.     (setq k$ (getkword "\n继续制作形文件?[<Yes>/<No>]<Yes>:"))
  217.     (if (or (= "Yes" k$) (= "" K$))
  218.       (setq CT T)
  219.       (setq CT nil)
  220.       )
  221.     );while
  222.   (close fs)
  223.   ;(reerr)
  224.   )
回复 支持 1 反对 0

使用道具 举报

发表于 2008-9-12 22:59:00 | 显示全部楼层

网上好像有软件

发表于 2008-9-17 14:01:00 | 显示全部楼层

用Autodesk Map 2004可以实现

很方便的

发表于 2009-3-18 17:41:00 | 显示全部楼层
本帖最后由 作者 于 2009-3-18 17:47:32 编辑

我自己写了个,根据二调的数据格式。可以像cass中一样绘制各种地物符号,然后转到shp中。

可以根据你的需求修改。

我的qq147828493,

邮箱:laoxie_1983@126.com

发表于 2010-4-8 22:15:00 | 显示全部楼层
我也想要!
发表于 2010-4-8 22:36:00 | 显示全部楼层

呵呵!其实我也写了一个!采用VBA写的!简单明了!有意向可以联系我!

qq:695705993

邮箱:anwei003@126.com

发表于 2010-6-28 16:58:00 | 显示全部楼层
你好.本人在做一个dwg转shp的程序,毫无头绪,请指教一下.
发表于 2010-8-9 15:36:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2010-9-30 15:37:00 | 显示全部楼层
楼上搞错了吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-18 10:32 , Processed in 0.194562 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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