乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 40|回复: 8

[编程交流] 更新旧LISP代码

[复制链接]

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 23:16:43 | 显示全部楼层 |阅读模式
在我的办公室,我们使用这个LISP程序来导入我们的调查数据。这是为了在LDD中工作。
 
我们似乎有它运行在Civil 3D后,现在一点调整,但我想我会张贴在这里,看看是否有人有任何想法与它。
 
它基本上是这样工作的
 
EG+1=线路起点
EG+2=继续行
EG+3=终点线
 
我感兴趣的一件事是,如果有人知道如何制作它,那么我们可以制作非连续线。基本上我们可以做一个横截面。你会得到这样的结果:
 
ER+1
CL+1
ER+1
 
然后是下一节
 
ER+2
CL+2
ER+2
 
一直到最后。这样可以避免在路上来回走动多次。现在我已经在一个程序中看到了这一点,其中每行只使用一个代码。这个看起来像这样
 
ER1-->ER1
CL1-->CL1
ER2-->ER2
 
因此,它连接使用相同描述符的任何点。这将是很好的,但该计划的成本为1000美元,我们将不得不完全转移到我们的系统。
 
如果有一种更简单的方法,那就太好了,因为1000美元+多少小时的安装成本并不太吸引人。
 
无论如何,如果你能想出任何可以帮助我们完成这个项目的想法,那就太好了。
 
 
代码如下:
 
  1. ;2002/05/21 - SURVEY.lsp
  2. ;this routine reads an ascii file with 5 elements in the order
  3. ;of - stn-pt (integer or real), y , x , z , note (string)
  4. ;and elevation from z value
  5. ;to run this routine you must have a block named in the variable PTDWG with 3
  6. ;attributes
  7. (setq REVVER "2")
  8. ;rev 2003/03/19 - fix block elev to zero - fix OSNAP problem
  9. ;rev 2002/10/04 - neg elevs, check for / or space after 1 letter FC
  10. (setvar "cmdecho" 0)
  11. (setq SNAPSET (menucmd "M=$(getvar,OSMODE)"))
  12. ;(print SNAPSET)
  13. (print (strcat "SURVEY ROUTINE LOADED - rev" REVVER))
  14. (defun C:SURVEY ( / F1)
  15.    (command "OSMODE" 0)
  16. ;    (command "OSMODE" 16384)
  17.    (setq PTDWG "x-el")
  18.      (setq BLKDIR "j:/lib/lisp/blocks.txt")
  19. ;    (setq BLKDIR "c:/baw/blocks.txt")
  20.    (print BLKDIR)
  21. (setq  FDIR  (getstring "\nENTER PATH (ie C:\\BAW ).."))
  22.    (print (vl-directory-files FDIR "*.asc"))
  23. (setq  FFILE (getstring "\nENTER FILE NAME (no extension) .."))
  24. (setq  FNAME (strcat FDIR "/" FFILE ".asc"))
  25. (setq  BLKSCALE (/ (getreal "\ENTER PLOT SCALE (1:500 = 500)") 1000))
  26.    (command "Layer" "M" FFILE "")
  27. (setq  F1 (open FNAME "r"))
  28.       (while
  29.          (setq PDATA (read-line F1))
  30.    ;    (print pdata)
  31.        ;(getstring "ReadLine")
  32.         (DO-IT)
  33.    );end of while
  34. (close F1)
  35. (command "ZOOM" "e")
  36. (print "OK")
  37. (command "OSMODE" SNAPSET)
  38. );end of points
  39. (defun do-it ( / pnt n m L P x y)
  40.    ;  (print "DO-IT MODULE")(print PDATA)
  41.    (setq
  42.            COUNTER99 1
  43.        n 1
  44.            m 1
  45.            pnt nil
  46.        pnt2 nil
  47.            DESC nil
  48.        L (strlen pdata)
  49.      );end of setq
  50.       (while (< n (+ L 2))
  51.         (setq x (substr pdata n 1))
  52. ;         (if (or (or (= x ",") (= x "")) (or (= x "/") (= x " ")))
  53.         (if (or (= x ",") (= x ""))
  54.           (progn
  55.            (setq PNT
  56.               (append PNT
  57.               (list (atof (substr PDATA M (- N M))))
  58.               );end of append
  59.            );end of setq
  60.            (setq PNT2
  61.                (append PNT2
  62.                 (list (substr PDATA M (- N M)))
  63.                );end of append
  64.             );end of setq
  65.           (setq ATT (vl-string-right-trim " " (last PNT2)))
  66.        (setq DESC (vl-string-right-trim "+0" ATT))
  67. (print DESC)
  68.        (setq DESC (vl-string-right-trim "+1" DESC))
  69. (print DESC)
  70.        (setq DESC (vl-string-right-trim "+2" DESC))
  71. (print DESC)
  72.        (setq DESC (vl-string-right-trim "+3" DESC))
  73. (print DESC)
  74. ;        (setq DESC (vl-string-right-trim "+0" ATT))
  75. ;        (setq DESC (vl-string-right-trim "+1" DESC))
  76. ;        (setq DESC (vl-string-right-trim "+2" DESC))
  77. ;        (setq DESC (vl-string-right-trim "+3" DESC))
  78. (print DESC)
  79.            (if (= (substr ATT 1 1) "X")
  80.                (setq X 1)
  81.                (setq X 0)
  82.            ); end of if
  83.            (if (> (vl-string-search "NO Z" ATT) 0)
  84.                (setq NOZ 1)
  85.                (setq NOZ 0)
  86.            ); end of if
  87.           (setq PNTR (cdr PNT))
  88.           (setq TEMP (reverse PNTR))
  89.           (setq TEMP (cdr TEMP))
  90.           (setq PT (cdr TEMP))
  91.        (if (= NOZ 1)
  92.            (setq ELEV -99)
  93.            (setq ELEV (car TEMP))
  94.        ); end of if
  95.           (setq IP
  96.             (list (cadr temp) (caddr temp) ELEV))
  97.            (setq IPXY (list (cadr TEMP) (caddr TEMP)))
  98.           (setq m (+ n 1))
  99.           (setq n (+ n 1))
  100.       );end of progn
  101.       (setq n (+ n 1))
  102.         );end of if
  103.     );end of while
  104.        (setq el (rtos ELEV 2 2))
  105.    (command "Layer" "M" FFILE "")
  106.    (if (/= X 1)
  107.        (command "insert" PTDWG ip BLKSCALE BLKSCALE 0 (fix (car pnt)) DESC el)
  108.    );end of if
  109. ;    (command "insert" PTDWG ip 1 1 30 (fix (car pnt)) DESC el)
  110.        (print (fix (car pnt)))
  111.    (setq BNAME (vl-string-right-trim "+" (substr ATT 1 2)))
  112.    (setq BNAME (vl-string-right-trim "-" BNAME))
  113.    (setq BNAME (vl-string-right-trim "/" BNAME))
  114.    (setq BNAME (vl-string-right-trim " " BNAME))
  115.    (setq ATTLEN (strlen ATT))
  116.        (setq PENCODE (substr ATT (- ATTLEN 1) 2))
  117.    (if (= PENCODE "+1")
  118.        (progn
  119.            (setq PLVERTS2d (list IPXY))
  120.            (setq PLVERTS (list IP))
  121.            (setq NUMVERTS 1)
  122.        )
  123.    ); end if
  124.       
  125.    (if (= PENCODE "+2")
  126.        (progn
  127.            (setq PLVERTS2d (append PLVERTS2d (list IPXY)))
  128.            (setq PLVERTS (append PLVERTS (list IP)))
  129.            (setq NUMVERTS (+ NUMVERTS 1))
  130.        )
  131.    ); end if   
  132.    (if (= PENCODE "+3")
  133.        (progn
  134.            (setq PLVERTS2d (append PLVERTS2d (list IPXY)))
  135.            (setq PLVERTS (append PLVERTS (list IP)))
  136.            (setq NUMVERTS 0)
  137.            (command "LAYER" "M" BLKLAYER "")
  138.            (command "PLINE" (foreach XXX PLVERTS2d (command XXX)))
  139.            (command "LAYER" "M" (strcat "TOPO3d-" BNAME) "")
  140.            (command "3dpoly" (foreach XXXX PLVERTS (command XXXX)))
  141.            (command "LAYER" "M" FFILE "")
  142.        )
  143.          (if (= (substr ATT (- ATTLEN 1) 2) "+0")
  144.            (print "no lines"))
  145.    ); end if
  146. ;loop to find block name
  147.        (setq BLOCKS (open BLKDIR "r"))
  148.    ;        (print COUNTER99)
  149.    (while (< COUNTER99 10)
  150.              (setq BDATA (read-line BLOCKS))
  151.            (while     (/= BNAME (vl-string-right-trim " " (substr BDATA 1 2)))
  152.                (setq BDATA (read-line BLOCKS))
  153.                
  154.            ) ; end of while
  155.            (READBLOCK)
  156.            ;(if     (= BNAME (substr BDATA 1 2))
  157.            ;    (READBLOCK)
  158.            ;    (setq BDATA (read-line BLOCKS))
  159.            ;   
  160.             ; end of if
  161.    ;        (print BDATA)
  162.            (setq COUNTER99 99)
  163. ;            (getstring "STOP")
  164.        ); end of while
  165.        (setq COUNTER99 1)
  166.        (close BLOCKS)
  167.    ;    (PRINT "HOWDY")
  168.    );end of do-it
  169. (defun READBLOCK ( / COUNTER NUMBLOCKS FC)
  170. ;     (getstring "READBLOCK MODULE Counter setup")
  171.    (setq
  172.        COUNTER 1
  173.        NUMBLOCKS 143
  174.        FC "AA"
  175.           );end of setq
  176.        (while (< COUNTER (+ NUMBLOCKS 1))
  177.             (setq FC (vl-string-right-trim " " (substr BDATA 1 2)))
  178.            (if (= FC BNAME)
  179.                (progb)
  180.                (setq COUNTER (+ COUNTER 1))
  181.                 );end of if
  182.         );end of while
  183. ); end of READBLOCK
  184. (defun PROGB ()
  185.        (setq BLKNAME (vl-string-right-trim " " (substr BDATA 9 16)))
  186.    ;        (print BLKNAME)
  187.        (setq BLKLAYER (vl-string-right-trim " " (substr BDATA 25 15)))
  188.    ;        (print BLKLAYER)
  189.            (command "LAYER" "M" BLKLAYER "")
  190.        (setq BATT (substr BDATA 40 1))
  191.            (if (= (vl-string-right-trim " " (substr BDATA 9 16)) "MISCSYMB")
  192.                (setq BATT "4")); end IF
  193.    (if (= BATT "3")
  194.          (command "insert" BLKNAME ipxy BLKSCALE BLKSCALE 0 "" "" ""))
  195. ;          (command "insert" BLKNAME ip 1 1 0 "" "" ""))
  196.    (if (= BATT "2")
  197.          (command "insert" BLKNAME ipxy BLKSCALE BLKSCALE 0 "" ""))
  198. ;          (command "insert" BLKNAME ip 1 1 0 "" ""))
  199.    (if (= BATT "1")        
  200.          (command "insert" BLKNAME ipxy BLKSCALE BLKSCALE 0 ""))
  201. ;          (command "insert" BLKNAME ip 1 1 0 ""))
  202.    (if (= BATT "0")
  203.        (command "insert" BLKNAME ipxy BLKSCALE BLKSCALE 0 )   
  204. ;        (command "insert" BLKNAME ip 1 1 0 )
  205.        )
  206.       
  207.    (setq COUNTER (+ NUMBLOCKS 1))
  208. );end of progb
回复

使用道具 举报

62

主题

466

帖子

404

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
310
发表于 2022-7-5 23:26:51 | 显示全部楼层
也许有些事情需要调查
考虑cond而不是你的4 if语句
在目录中键入时使用GetField而不是getstring
entmake而不是命令“_u.insert”
我会在Lisp程序开始时做一些事情,比如。
  1. (foreach x '("blockname1" "blockname2" "blockname3" "blockname4")
  2. (if (not (tblsearch "block" x))
  3.    (progn
  4.      (setvar 'cmdecho 0)
  5.      (command "_.insert" x nil)
  6.      (setvar 'cmdecho 1)
  7.    )
  8. )
  9. )
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 23:38:53 | 显示全部楼层
作为一名前民用软件经销商,我们曾数次查看过一个stringing程序。1000美元可能花得很好,我们使用的软件是“Stringer”www.civilsurveysolutions。通用域名格式。au做的不仅仅是将点串起来作为CIV3d的前端。你到底在哪里
 
无论如何,有一种方法可以串线,你需要一个pxyzd点xyz描述符txt文件,你在描述符上对文件进行排序,但在pt编号上按调查顺序进行二次排序,然后你阅读每一行,检查描述符和外部列表,如果一行连接在一起,直到描述符更改,然后重新开始,因此在一段中,这是一个字符串程序。
 
此外,横截面测量是一种可行的方法,它提供了最佳模型和特征线,新的测量仪器内置了此功能,因此可以记住您的代码。
 
现在,对于smarts,描述符可以有01f first fence pt、01f*02f next fence point之类的内容,但从fence 2开始,下一个点01f fence 1继续02f自动连接到最后三个点中间的点01f 01f 01f*c靠近第一个点01f*作为01f 01f*ae绘制一个3点弧
回复

使用道具 举报

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 23:44:51 | 显示全部楼层
stringer程序就是我正在看的程序。问题是一旦我们有了它,我们必须在它里面完全建立一个新的系统。
回复

使用道具 举报

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 23:48:26 | 显示全部楼层
当我们在civil 3d 2011中使用它时,看起来它实际上不起作用,线条工作没有完成。我们得到一个零误差或类似的结果。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 23:54:48 | 显示全部楼层
你下载了演示等尝试你的代码作为eb01不是eb+1+符号可能是问题我们的人使用数字40301边缘的道路字符串1更快地键入,alos如果你有演示联系经销商,他们可能会提供一个演示库供你使用他们应该有eb CL DR TBM PSM等
 
在此处发布数据示例
回复

使用道具 举报

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 00:06:08 | 显示全部楼层
这是数据列表。它快了
 
10065425936.373321696.2883,39.053264,TF+0
10075425935.41321696.2652,39.04745,TF+0
10085425936.865321699.4686,39.34945,TB+1
10095425936.935321701.93,39.112139,TB+2
10105425936.647321703.0839,39.153939,TB+2
10115425936.53321704.3993,39.326792,TB+3
 
 
因此,对于TB+1->TB+3,它创建了一条线。如果你在创建这条线时看到一个集水池,你可以去:
 
TB+1
TB+2
CB+0
TB+2
TB+3
 
现在我认为你不会再使用+#了,但这让我大致了解了我希望用这个程序做什么。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 00:15:10 | 显示全部楼层
明确地去掉+并且我把tb1 tb2 tb3读作3个不同的字符串,对吗?如果不是,那么所有TB都应该是TB1,1是字符串,TB2是第二个字符串,TB3是第三个字符串,它们不连接在一起。
 
在我们的图书馆TB1将按原样工作!位于气缸组1的顶部,并按点数顺序连接所有“TB1”。
 
此外,与我们的调查人员交谈时,他们只是向每个新字符串添加一个数字,而不是说必须记住单个代码TB1 TB2 TB3的最后一个字符串数字。他们可能有TB11 TB42 Tb45,唯一的限制是当他们达到99时
回复

使用道具 举报

0

主题

1

帖子

1

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 00:23:48 | 显示全部楼层
嘿!
 
我需要一个LISP从ascii文件中导入多个块。应该如何工作:
 
*选择文件(或先选择静态地址)
*通过以下方式从文件加载块(块名、X、Y、Z、缩放、旋转、ATTRIBUTE1、ATTRIBUTE2、…、ATTIRBUTEx)
 
这可能吗?怎样
 
祝你好运,尤根
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-11 00:42 , Processed in 0.398044 second(s), 70 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表