树櫴希德 发表于 2014-5-5 22:32:22

如图所示:有人用LISP解决吗

gzxl 发表于 2014-5-5 22:51:59

本帖最后由 gzxl 于 2014-5-5 22:53 编辑

由数据生成图形,还是图形生成数据?


抱歉,我应该多此一问了,没看标题

树櫴希德 发表于 2014-5-6 09:13:25

大侠们都来想想办法吧

树櫴希德 发表于 2014-5-6 17:50:03

73哥程序(defun SstoEs(ss / a en lst)
(if ss(progn(setq a -1)
(while(setq en(ssname ss(setq a(1+ a))))
   (setq lst(cons en lst)))))
lst)
(defun subtotals(lst m ns / myfun a b c);;对lst以子表第m项为关键字进行分类,ns为整数时记录第ns项、为表(2 3)记录表中指定的项、为空记录关键字以外所有项
(cond((=(type ns)'LIST)(defun myfun(x)(list(mapcar'(lambda(y)(nth y x))ns))))
       ((=(type ns)'INT)(defun myfun(x)(LIST(NTH ns x))))
       (t(defun myfun(x)(list(vl-remove c x)))))
(foreach x lst
    (setq a(if(setq c(nth m x)b(assoc c a))
       (subst(append b(myfun x))b a)
       (append a(list(append(list c)(myfun x))))))))
(defun c:tt1()
(setq blc (getint "\n请输入比例尺1:"))
(setvar 'userr1 blc);设置比例尺
; (setq zg(* 0.002 blc));字高
(setq scale (* 0.001 blc));缩放比例
(foreach x(vl-remove-if'(LAMBDA(x)(<(length x)3))(SUBTOTALS(mapcar'(lambda(x)(setq p(cdr(assoc 10(entget x))))
       (list(list(car p)(cadr p))(last p)))(sstoes(ssget"X"'((8 . "GCD")))))0 1))
    (gxl-cs:gcd x scale))
(princ)
)
;;by Gu_xl
(defun gxl-cs:gcd (inspt scale / pt blkdef obj);展高程点函数(inspt:((x y)h1 h2)),scale:缩放比例)
(setvar "CMDECHO" 0)
(command "layer" "m" "GCD" "c" "1" "" "L" "CONTINUOUS" """")
(regapp "SOUTH")
;;;检查字体 "HZ" 是否存在
(if(not(tblobjname "style" "HZ"))(command "style" "HZ" "rs.shx,hztxt.shx" 0 1 0 "" "" ""))
;;;检查是否存在高程点图块定义
(if(not(tblobjname "block" "GC200"))
    (progn
      (setq obj
      (vla-AddPolyline
         (vla-Add(vla-get-Blocks(vla-get-ActiveDocument(vlax-get-acad-object)))(vlax-3D-point '(0 0 0)) "GC200")
   (vlax-make-variant(vlax-safearray-fill(vlax-make-safearray vlax-vbdouble (cons 0 5))'(-0.2 0 0 0.2 0 0)))))
      (vla-SetBulge obj 0 1)(vla-SetBulge obj 1 1)
      (vla-put-Closed obj :vlax-true)
      (vla-put-ConstantWidth obj 0.4)))
;;;插入块
(entmake (list
             '(0 . "INSERT")
             '(100 . "AcDbEntity")
             '(100 . "AcDbBlockReference")
             '(66 . 1);;;属性跟随标志,1跟随,0不跟随
            '(2 . "GC200")
            (cons 10(setq pt(append(car inspt)(list(cadr inspt)))))
            (cons 41 scale)
            (cons 42 scale)
            (cons 43 scale)
            (list -3 '("SOUTH" (1000 . "202101")))))
;;;插入属性
(entmake (list
             '(0 . "ATTRIB")
             '(100 . "AcDbEntity")
             '(100 . "AcDbText")
      (cons 62 1)
            (cons 10 (setq pt(polar pt 0(* 1.2 scale))))
            (cons 40 (* 2.0 scale))
            (cons 50 0)
            (cons 41 0.8)
            (cons 51 0)
            (cons 1 (rtos(cadr inspt)2 3))
            (cons 7 "HZ")
            (cons 72 0)
            (cons 11 pt)
            '(100 . "AcDbAttribute")
            (cons 2 "height1")
            (cons 700)
            (cons 74 1)
         ))
(entmake (list
             '(0 . "ATTRIB")
             '(100 . "AcDbEntity")
             '(100 . "AcDbText")
      (cons 62 2)
            (cons 10 pt)
            (cons 40 (* 2.0 scale))
            (cons 50 0)
            (cons 41 0.8)
            (cons 51 0)
            (cons 1 (rtos(last inspt)2 3))
            (cons 7 "HZ")
            (cons 72 0)
            (cons 11 pt)
            '(100 . "AcDbAttribute")
            (cons 2 "height2")
            (cons 700)
            (cons 74 3)
         ))
(entmake (list
             '(0 . "ATTRIB")
             '(100 . "AcDbEntity")
             '(100 . "AcDbText")
   (cons 62 3)
            (cons 10 (setq pt(polar(car inspt)pi(* 1.2 scale))))
            (cons 40 (* 2.0 scale))
            (cons 50 0)
            (cons 41 0.8)
            (cons 51 0)
            (cons 1 (rtos(-(cadr inspt)(last inspt))2 3))
            (cons 7 "HZ")
            (cons 72 2)
      (cons 73 2)
            (cons 11 pt)
            '(100 . "AcDbAttribute")
            (cons 2 "height2")
            (cons 700)
            (cons 74 2)
         ))
   ;;;结束标志
   (entmake '((0 . "SEQEND")))
   (princ)
)

树櫴希德 发表于 2014-5-6 17:51:51

是根据DTM文件DTMTF.LOG文件正反算出来的
树櫴希德 15:09:07
三角网空间相交,形成三棱柱或者三棱锥
计算公式为v=(H1+H2+H3)/3*S
树櫴希德 15:10:19
两次各测各的,各自形成三角网
树櫴希德 15:10:27
然后叠加
树櫴希德 15:10:54
这是CASS计算土方的思路
树櫴希德 15:11:08
很精准
树櫴希德 15:11:16
就是没有计算过程
树櫴希德 15:11:38
我要把它弄得跟方格网一样
树櫴希德 15:11:45
让甲方看懂
树櫴希德 15:12:06
让他们手算可以验证

树櫴希德 发表于 2014-5-6 18:01:49

野外数据通过南方测绘CASS7.0系统传输到计算机中,采用南方测绘CASS7.0系统中的构造三角网法(即建立数字地面模型):利用开挖前、开挖后坐标高程数据分别生成三角网时手工选择画好的地形特征线,删除边界以外的三角形,检查有无高程点没有参加三角形组网,检查有无因为程序漏洞引起的三角形穿越地形特征线情况,对三角网内三角形进行必要的增加和删除,使之更加符合实际地形情况,然后将检查无误的三角网导出三角网文件(*.SJW)。再利用软件DTM法土方计算中的计算两期间土方功能,根据开挖前、开挖后的三角网文件,在CAD中把两期三角网模型进行叠加,把两期三角网空间相交的线作为开挖零界线,分解出若干个三棱柱和三棱锥,后分别计算出每个三棱柱和三棱锥体积并加以统计,高于原地面的三棱柱和三棱锥体积为填方,低于原地面的三棱柱和三棱锥体积为挖方,三棱柱或者三棱锥体积公式为V=(H1+H2+H3)/3×S。其中H1、H2、H3为三角高度,要么均≥0、要么均≤0,S为投影面积,V为体积。上述计算过程及方法严格遵守了国家标准《城市测量规范CJJ T8-2011》中9.8章土石方测量中的详细规定。南方CASS是由广东南方数码科技公司在CAD基础上研发,其开发者是由武汉测绘科技大学专家教授组成,CASS地形地籍成图软件经过十几年的稳定发展,市场和技术十分成熟,用户遍及全国各地,涵盖了测绘、国土、规划、市政、环保、地质、交通、水利、电力、矿山及相关行业;软件销量超过25000套,市场占有率遥遥领先,已经成长为业内应用最广、服务最好的软件品牌,其DTM两期间土方计算法 通过美国AUTODESK公司开发的AutoCADCivil 3D 软件中土方功能计算验证,利用南方CASS和 AutoCADCivil 3D用同样图形数据计算结果误差为0,是可靠和精准的计算方法。

yshf 发表于 2014-5-6 22:14:03

1、CASS在两期三角网叠加形成计算用的新三角网时,其解算时而会出现错误。
2、同样的数据,CASS生成的三角网与Civil 3D的不完全相同。CASS两期间DTM法计算出的数量与Civil 3D界内体积也不尽相同。

yshf 发表于 2014-5-6 22:27:20

CASS生成的DTMTF.LOG文件中,每个三角形各顶点只给出了第一期的高程,第二期的如不是实测点,则无高程值,此时需要利用第二期的数据,采用双线性插值法来计算出高程。根据两期高程有下述多种情况:
1、三角全挖2、三角全填3、一角挖其它两角填4、二角挖另一角填5、一角填其它两角挖6、二角填另一角挖7、一角不挖不填另两角填或挖8、二角不挖不填另一角填或挖9、三角均不挖不填......

树櫴希德 发表于 2014-5-7 20:33:32

所以要用三角网文件反算 ,得出破网计算后每个三角形各顶点第二期的高程,与第一期整合。

树櫴希德 发表于 2014-5-7 20:36:33

生成三角网处理坡坎方面,网中每一个三角形只能是坡顶线上相邻两点连接坡脚线上对应一点,或者是坡脚线相邻两点连接坡顶线上对应一点,才不会失真与地形模型。不管软件是CASS还是CIVLL 3D 2012
页: 1 [2] 3
查看完整版本: 生成重合或最近点高差坐标文件(红色-绿色)