njcknfy
发表于 2005-3-21 20:32:00
文字消隐不能使用是因为你的CAD没有安装EXpress工具集,CADR14的版本和CADR2000的版本在安装时只要选择完全安装,一般EXpress的工具集都被安装,自CADR2002开始,这个工具要另外安装,你可到明经通道的网上下载,我在前一段时间在论坛里贴的多义线自动精简结点的LISP程序就可以实现和等值线滤波同样的功能,只是运行的速度不如CASS中的快,凑合着也能用。
xgr
发表于 2005-3-23 14:40:00
朋友:你的情况可用另一方法:展点完后,利用CASS的“实体添加属性”命令给实体“GC200”加上属性,编码是“202101”,即可利用所展点生成TIN网。我也是搞测绘的,展点程序是自己编写的,其中的块“GC200”也没有添加实体属性,我是用这一方法来实现TIN网的生成。
njcknfy
发表于 2005-3-23 18:46:00
我试了一下,利用给实体添加扩展属性的命令确实可以给GC200的块添加202101的扩展属性,就可以建三角网了。
xgr
发表于 2005-3-28 16:51:00
你的这个程序我下载试用了,其中好象没有考虑到坐标系的问题,如果图形是自定义坐标系的话,精减后的等高线会位移,另外,如果能够提高精减速度的话,将是一个很好的程序,是否能把其中的COMMAND用ENTMAKE涵数代替,这样也许速度要更快一些。仅供参考。
另外,本人还有一事相求,CASS的等高线的自动生成,如果选择用二次拟和线,则生成的等高线不经过高程点。不知有什么方法解决。
0-baby
发表于 2005-3-31 12:00:00
楼主好强哦。。佩服。。收益较多。。
xgr
发表于 2005-4-3 15:48:00
批量展点程序,运行于CASS5.1,可以利用展的点,用CASS中的命令生成等高线。先建一文本,格式为
X Y Z
点号 X Y Z
保存为.TXT,运行程序提示选择数据时,选择该文本即可。
代码如下:
defun dstbm ()<BR> (setq mm (entlast))<BR> (setq pb (entget mm))<BR> (regapp "SOUTH")<BR> (setq<BR> xb<BR> (append<BR> pb<BR> (list<BR> (list '-3<BR> (list "SOUTH" (cons 1000 stbmx))<BR> )<BR> )<BR> )<BR> )<BR> (entmod xb)<BR> (princ)<BR> )
;;;批量展测量点<BR>(defun c:zdtxt (/ l wzcl wzch l3 oldcmd oldblip oldsnap tckz newlayer fle fn pt dm zb xyz h lscale xyz1 xyz2)<BR> (setq l (getvar "ltscale"))<BR> (setq wzcl (* l 2))<BR> (setq wzch (* l 2))<BR> (setq l3 (angle (getvar "ucsorg")<BR> (getvar "ucsxdir")<BR> )<BR> )<BR> (setq oldcmd (getvar "cmdecho"))<BR> (setvar "cmdecho" 0)<BR> (setq oldblip (getvar "blipmode"))<BR> (setvar "blipmode" 0)<BR> (setq oldsnap (getvar "osmode"))<BR> (setvar "osmode" 0)<BR> (setvar "angdir" 1)<BR> (setq fle (getfiled "请选择数据文件"<BR> "*"<BR> "txt;dat;*"<BR> 2<BR> )<BR> )<BR> (if (= (tblobjname "layer" "GCD") nil)<BR> (progn<BR> (command "layer" "n" "zd" "C" "1" "GCD" "")<BR> )<BR> )<BR> (setq fn (open fle "r"))<BR> (read-line fn)<BR> (setq n 0)<BR> (while (setq pt (read-line fn))<BR> (setq dm (vl-princ-to-string (read pt)))<BR> (setq zb (substr pt (+ (strlen dm) 1)))<BR> (setq<BR> xyz (trans (read (strcat "(" zb ")"))<BR> 1<BR> 0<BR> )<BR> )<BR> (setq h (rtos (last xyz) 2 1))<BR> (setq lscale (* l 1))<BR> (entmake<BR> (list (cons 0 "INSERT")<BR> (cons 100 "AcDbEntity")<BR> (cons 8 "GCD")<BR> (cons 100 "AcDbBlockReference")<BR> (cons 10 xyz)<BR> (cons 41 lscale)<BR> (cons 42 lscale)<BR> (cons 43 lscale)<BR> (cons 410 "model")<BR> (cons 2 "gc200")<BR> )<BR> ) ;"gc200"为块名<BR> (setq stbmx (itoa 202101))<BR> (dstbm)<BR> (setq xyz1<BR> (polar xyz (/ pi 2) (* l 2))<BR> )<BR> (setq xyz2<BR> (polar xyz (* (/ pi 2) 3) (* l 2))<BR> )<BR> (entmake (list (cons 0 "Text")<BR> (cons 100 "AcDbEntity")<BR> (cons 8 "GCD")<BR> (cons 100 "AcDbText")<BR> (cons 7 "standard")<BR> (cons 1 dm)<BR> (cons 40 wzcl)<BR> (cons 41 0.8)<BR> (cons 410 "model")<BR> (cons 71 0)<BR> (cons 72 4)<BR> (cons 73 0)<BR> (cons 10 xyz1)<BR> (cons 11 xyz1)<BR> )<BR> )<BR> (setq stbmx (itoa 202111))<BR> (dstbm)<BR> (entmake (list (cons 0 "Text")<BR> (cons 100 "AcDbEntity")<BR> (cons 8 "GCD")<BR> (cons 100 "AcDbText")<BR> (cons 7 "hz")<BR> (cons 1 h)<BR> (cons 40 wzch)<BR> (cons 41 0.8)<BR> (cons 410 "model")<BR> (cons 71 0)<BR> (cons 72 4)<BR> (cons 73 0)<BR> (cons 10 xyz2)<BR> (cons 11 xyz2)<BR> )<BR> )<BR> (setq stbmx (itoa 202111))<BR> (dstbm)<BR> (setq n (+ n 1))<BR> )<BR> (if (= pt nil)<BR> (progn<BR> (alert (strcat "*--*展点结束,共展"<BR> (itoa n)<BR> "个点*--*!。"<BR> )<BR> )<BR> (setvar "cmdecho" oldcmd)<BR> (setvar "blipmode" oldblip)<BR> (setvar "osmode" oldsnap)<BR> (setvar "angdir" 1)<BR> (setvar "clayer" "0")<BR> )<BR> )<BR> (close fn)<BR> (command "zoom" "E")<BR> (princ)<BR> )
njcknfy
发表于 2005-4-14 19:11:00
试了一下,使用entmake的方法,运行的速度确实提高了不少,其实扩展数据项也可以一起写到实体里去,我试过了
njcknfy
发表于 2005-4-17 22:20:00
发一个地下管线探查数据录入的Access数据库模板供大家参考,希望对大家有帮助,谢谢!
LONGXIN
发表于 2005-4-21 14:04:00
楼主有没在CAD下用VBA开发access数据库的示例,比如把所有控制点的成表放在一个图幅里,可以用数据库存管理。当在cad下移动一个控制点的位置后其在数据库中的坐标值可以连动更改。
njcknfy
发表于 2005-4-23 21:11:00
我比较喜欢用文本文件作为中间交换的文件,让LISP把文本文件导入到CAD中建一个表,只要点号没有重复,操作起来也很方便,修改完的文本文件再导回到数据库中,方法比较简单,对VB水平不太高的人很适用
页:
1
2
3
4
[5]
6
7
8
9
10
11
12
13
14