明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 10998|回复: 9

提取CASS宗地属性的代码

  [复制链接]
发表于 2007-8-23 18:06:00 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2007-8-23 18:07:53 编辑

这是在CASS5.0下提取宗地属性的源码。
在网上查了一查,都是一些手里捏着源码不发布的主,要么QQ联系,要么电话联系,呵呵,看来都不是什么善鸟,没法,自已写一段。
  1. (vl-load-com)
  2. ;; 条目名称 SOUTHDIJI
  3. ;;选择宗地界址线
  4. (defun c:bak ()
  5.   ;; 获得JZD层上的闭合线选择集,必须带有扩展数据("SOUTH" (1000 . "300000"))。
  6.   (setq ss    (ssget "x" '((0 . "*LINE") (8 . "JZD") (-4 . "&=") (70 . 1) (-3 ("SOUTH" (1000 . "300000")))))
  7. Index 0
  8.   ) ;_ End setq
  9.   (repeat (if ss
  10.      (sslength ss)
  11.      0
  12.    ) ;_ End if
  13.     (setq Ename        (ssname ss Index)
  14.    Index        (1+ Index)
  15.    Edata        (entget Ename '("SOUTH"))
  16.    ;; 找出对象所指向的词典。
  17.    ;;“{ACAD_XDICTIONARY”表示扩展词典组的起点。
  18.    Edata360     (cdr (member '(102 . "{ACAD_XDICTIONARY") Edata))
  19.    XrEnameSouth nil
  20.     ) ;_ End setq
  21.     (if Edata360
  22.       (progn
  23. ;; 360 所有者词典的硬所有者 ID/句柄。
  24. ;; 在此不考虑出现多个360的情况,感觉这种情况不应该存在。
  25. (setq DEname    (cdr (assoc '360 Edata360)) ;_词典对象。
  26.        DEdata    (entget DEname) ;_词典数据。
  27.        ;;条目名称SOUTHDIJI所对应的XRECORD对象
  28.        XrEnameSouth (cdr (assoc '360 (cdr (member '(3 . "SOUTHDIJI") DEdata))))
  29. ) ;_ End setq
  30.       ) ;_ End progn
  31.     ) ;_ End if
  32.     (if XrEnameSouth
  33.       (progn
  34. (setq XrEdataSouth (entget XrEnameSouth)
  35.        XrEdataSouth (vl-remove-if-not (function (lambda (_Var) (= 1 (car _Var)))) XrEdataSouth)
  36.        XrEdataSouth (mapcar (function (lambda (_Var) (strcat "\t" (cdr _Var)))) XrEdataSouth)
  37.        DiJiData    (apply 'strcat XrEdataSouth)
  38.        Xdata    (mapcar 'cdr (cdr (assoc "SOUTH" (cdr (assoc '-3 Edata)))))
  39.        DiJiData    (strcat (nth 1 Xdata) "\t" (nth 2 Xdata) "\t" (nth 3 Xdata) DiJiData)
  40. ) ;_ End setq
  41. (princ (strcat DiJiData "\n"))
  42. ;;(setq DiJiDataLst nil)
  43. (setq DiJiDataLst (cons DiJiData DiJiDataLst))
  44. ;;; (vlax-invoke-method (vlax-ename->vla-object XrEnameSouth) 'GetXRecordData 'XRecordDataType 'XRecordData)
  45.       ) ;_ End progn
  46.       (progn
  47. ;; 没有对应的词典,找不到宗地属。
  48. (princ (strcat "\n句柄:[" (cdr (assoc '5 Edata)) "]所指的对象没有宗地属性。"))
  49.       ) ;_ End progn
  50.     ) ;_ End if
  51.   ) ;_ End repeat
  52.   (princ)
  53. ) ;_ End defun
刚刚写完,基本的功能已经有了,要用的自个修改吧。
"觉得好,就打赏"
还没有人打赏,支持一下

本帖被以下淘专辑推荐:

发表于 2009-10-19 14:35:00 | 显示全部楼层
强人!高手!羡慕 啊.....
发表于 2010-8-1 18:13:00 | 显示全部楼层

好啊,找了好久终于找到了你

 

没搞过LISP哈。。。

 

有哪位好人接个VB的么,盼啊盼

发表于 2012-4-19 23:03:08 | 显示全部楼层
本帖最后由 虚子 于 2012-4-19 23:27 编辑

CASS2008生成的宗地图无 (102 . "{ACAD_XDICTIONARY")和(3 . "SOUTHDIJI"),汗啊,不知道这新版本到底把地籍XRECORD对象数据存哪去了,就是没找到

不过,经测试,在CASS56.0中保存的宗地数据格式也和CASS5.0相同,CASS7.0也不行,并且我的CASS2008是破解版,用的是CASS7.0内核,就是说从7.0开始宗地数据格式就开始改变了,求高人破解CASS2008的宗地属性的XRECORD对象数据的储存位置,我到现在还没找到,太苦B了,汗。。。。
发表于 2012-4-21 16:36:45 | 显示全部楼层
顶,求CASS7.0宗地属性的XRECORD对象数据的储存位置,
发表于 2012-4-22 21:00:58 | 显示全部楼层
汗,问题已经解决了,从别人的问题帖子里找到为啥我老找不到的原因。。
发表于 2014-10-9 16:58:20 | 显示全部楼层
大神,给译成C#吧,谢谢啦!
发表于 2014-10-9 18:36:31 | 显示全部楼层
觉得有点罗嗦
发表于 2014-10-9 18:40:31 | 显示全部楼层
(setq ss (ssget '((0 . "LWPOLYLINE")(8 . "JZD"))))
  (setq i 0)
  (setq n 1)
(repeat (sslength ss)
    (setq ssn (ssname ss i))
(SETQ QS (assoc -3 (entget ssn '("*"))))
发表于 2016-7-6 23:53:57 | 显示全部楼层
看着咋那么复杂了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-23 02:13 , Processed in 0.214341 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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