乐筑天下

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

[编程交流] Lisp从coo插入点

[复制链接]

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 16:46:04 | 显示全部楼层 |阅读模式
大家好,
 
我试图制作一个lisp,将点从txt文件导入autocad,然后将它们折线,并从这些点进行并集,创建一个iregular区域。主要目的是计算该创建对象的面积。
txt文件如下所示:
101 234.442 442.425
102 .....
103....
104...
105...
 
有谁能帮我做这个嘴唇?我有点需要它,直到明天。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 16:55:45 | 显示全部楼层
在excel中打开文件的最快方法,使用空格作为分隔符。
 
在单元格E1的顶部空白一行
然后在单元格E2中使用=串联(b2,“,”,c2)
根据需要将公式完全复制下来
你应该有
普林线
x、 y
x、 y
x、 y等
 
只需复制E列并粘贴到autocad命令行。
 
是的,我可以Lisp程序,但这也一样快。
回复

使用道具 举报

55

主题

402

帖子

357

银币

后起之秀

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

铜币
274
发表于 2022-7-5 17:03:10 | 显示全部楼层
你可以试试这个:-
  1. (defun c:impnt (/ str->list a b c cm d s)
  2. (defun str->list (str / b)
  3.    (foreach x (reverse (vl-string->list str))
  4.      (cond ((eq x 44) (setq b (cons (list x) b)))
  5.     (t
  6.      (if (not b)
  7.        (setq b (cons (list x) b))
  8.        (setq b (cons (cons x (car b)) (cdr b)))
  9.      )
  10.     )
  11.      )
  12.    )
  13.    (setq b (mapcar '(lambda (x) (vl-list->string (vl-remove 44 x))) b))
  14.    (if        (and (> (length b) 1)
  15.      (numberp (read (car b)))
  16.      (numberp (read (cadr b)))
  17.      (numberp (read (caddr b)))
  18. )
  19.      (list (atof (car b)) (atof (cadr b)) (atof (caddr b)))
  20.    )
  21. )
  22. (if
  23.    (and (setq
  24.    a (getfiled "Select CSV File" (getvar "dwgprefix") "txt;csv" 16)
  25. )
  26. (setq s (getdist "\nSpecify Point Size : "))
  27. (setq a (open a "r"))
  28. (setq c (while        (setq b (read-line a))
  29.            (setq c (cons (str->list b) c))
  30.          )
  31. )
  32.    )
  33.     (progn
  34.       (close a)
  35.       (setq cm (getvar 'cmdecho))
  36.       (setvar 'cmdecho 0)
  37.       (setvar 'pdmode 35)
  38.       (setvar 'pdsize s)
  39.       (setq d (ssadd)
  40.      c (vl-remove nil c)
  41.       )
  42.       (foreach        x c
  43. (ssadd        (entmakex (list        (cons 0 "POINT")
  44.                         (cons 62 3)
  45.                         (cons 10 x)
  46.                   )
  47.         )
  48.         d
  49. )
  50.       )
  51.       (ssadd (entmakex
  52.         (append        (list (cons 0 "LWPOLYLINE")
  53.                       (cons 100 "AcDbEntity")
  54.                       (cons 100 "AcDbPolyline")
  55.                       (cons 90 (length c))
  56.                       (cons 70 1)
  57.                 )
  58.                 (mapcar (function (lambda (p) (cons 10 p))) c)
  59.         )
  60.       )
  61.       d
  62.       )
  63.       (command "_.zoom" "_o" d "")
  64.       (setvar 'cmdecho cm)
  65.       (sssetfirst nil d)
  66.     )
  67. )
  68. (princ)
  69. )

 
TXT/CSV格式应该是这样的。程序自动跳过标题。
  1. Easting (x),Northing (Y),Elevation (Z)
  2. 373247.97,2051482.34,0
  3. 373271.02,2051446.02,0
  4. 373215.57,2051471.86,0
  5. 373210.14,2051497.24,0
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 17:07:00 | 显示全部楼层
satishrajdev第1篇文章中的2件事csv文件是Ptnum X Y,所以需要去掉点数,第2件事是他想做一个点线,所以问题是你真的需要点吗?当您使用“car cadr&caddr”时,您可以删除“car”,这将是pt编号。
 
根据我的帖子
普林线
x、 y
x、 y
 
如果两者都需要,那么做一个双通道导入点,然后第二个通道使pline。
回复

使用道具 举报

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 17:15:27 | 显示全部楼层
 
谢谢你的帮助。我正努力为我的老师们实现教育目标。
我会检查一下,但直到现在它工作得很好。
祝您有个美好的一天。
回复

使用道具 举报

55

主题

402

帖子

357

银币

后起之秀

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

铜币
274
发表于 2022-7-5 17:16:22 | 显示全部楼层
我知道,我为某人写了这个例程并直接发布了。我已经根据OP的要求修改了以下代码。
 
  1. (defun c:impnt (/ str->list a b c cm d s)
  2. (defun str->list (str / b)
  3.    (foreach x (reverse (vl-string->list str))
  4.      (cond ((eq x 44) (setq b (cons (list x) b)))
  5.     (t
  6.      (if (not b)
  7.        (setq b (cons (list x) b))
  8.        (setq b (cons (cons x (car b)) (cdr b)))
  9.      )
  10.     )
  11.      )
  12.    )
  13.    (setq b (mapcar '(lambda (x) (vl-list->string (vl-remove 44 x))) b))
  14.    (if        (and (> (length b) 1)
  15.      (numberp (read (cadr b)))
  16.      (numberp (read (caddr b)))
  17.      (numberp (read (cadddr b)))
  18. )
  19.      (list (atof (cadr b)) (atof (caddr b)) (atof (cadddr b)))
  20.    )
  21. )
  22. (if
  23.    (and (setq
  24.    a (getfiled "Select CSV File" (getvar "dwgprefix") "txt;csv" 16)
  25. )
  26. (setq s (getdist "\nSpecify Point Size : "))
  27. (setq a (open a "r"))
  28. (setq c (while        (setq b (read-line a))
  29.            (setq c (cons (str->list b) c))
  30.          )
  31. )
  32.    )
  33.     (progn
  34.       (close a)
  35.       (setq cm (getvar 'cmdecho))
  36.       (setvar 'cmdecho 0)
  37.       (setvar 'pdmode 35)
  38.       (setvar 'pdsize s)
  39.       (setq d (ssadd)
  40.      c (vl-remove nil c)
  41.       )
  42.       (foreach        x c
  43. (ssadd        (entmakex (list        (cons 0 "POINT")
  44.                         (cons 62 3)
  45.                         (cons 10 x)
  46.                   )
  47.         )
  48.         d
  49. )
  50.       )
  51.       (ssadd (entmakex
  52.         (append        (list (cons 0 "LWPOLYLINE")
  53.                       (cons 100 "AcDbEntity")
  54.                       (cons 100 "AcDbPolyline")
  55.                       (cons 90 (length c))
  56.                       (cons 70 1)
  57.                 )
  58.                 (mapcar (function (lambda (p) (cons 10 p))) c)
  59.         )
  60.       )
  61.       d
  62.       )
  63.       (command "_.zoom" "_o" d "")
  64.       (setvar 'cmdecho cm)
  65.       (sssetfirst nil d)
  66.     )
  67. )
  68. (princ)
  69. )

 
 
另一个没有点实体:
 
  1. (defun c:impnt (/ str->list a c cm d)
  2. (defun str->list (str / b)
  3.    (foreach x (reverse (vl-string->list str))
  4.      (cond ((eq x 44) (setq b (cons (list x) b)))
  5.     (t
  6.      (if (not b)
  7.        (setq b (cons (list x) b))
  8.        (setq b (cons (cons x (car b)) (cdr b)))
  9.      )
  10.     )
  11.      )
  12.    )
  13.    (setq b (mapcar '(lambda (x) (vl-list->string (vl-remove 44 x))) b))
  14.    (if        (and (> (length b) 1)
  15.      (numberp (read (cadr b)))
  16.      (numberp (read (caddr b)))
  17.      (numberp (read (cadddr b)))
  18. )
  19.      (list (atof (cadr b)) (atof (caddr b)) (atof (cadddr b)))
  20.    )
  21. )
  22. (if
  23.    (and (setq
  24.    a (getfiled "Select CSV File"
  25.                (getvar "dwgprefix")
  26.                "txt;csv"
  27.                16
  28.      )
  29. )
  30. (setq a (open a "r"))
  31. (setq c (while        (setq b (read-line a))
  32.            (setq c (cons (str->list b) c))
  33.          )
  34. )
  35.    )
  36.     (progn
  37.       (close a)
  38.       (setq cm (getvar 'cmdecho))
  39.       (setvar 'cmdecho 0)
  40.       (setq d (ssadd)
  41.      c (vl-remove nil c)
  42.       )
  43.       (ssadd (entmakex
  44.         (append        (list (cons 0 "LWPOLYLINE")
  45.                       (cons 100 "AcDbEntity")
  46.                       (cons 100 "AcDbPolyline")
  47.                       (cons 90 (length c))
  48.                       (cons 70 1)
  49.                 )
  50.                 (mapcar (function (lambda (p) (cons 10 p))) c)
  51.         )
  52.       )
  53.       d
  54.       )
  55.       (command "_.zoom" "_o" d "")
  56.       (setvar 'cmdecho cm)
  57.       (sssetfirst nil d)
  58.     )
  59. )
  60. (princ)
  61. )
回复

使用道具 举报

55

主题

402

帖子

357

银币

后起之秀

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

铜币
274
发表于 2022-7-5 17:24:04 | 显示全部楼层
 
不客气:)
回复

使用道具 举报

107

主题

615

帖子

575

银币

中流砥柱

Rank: 25

铜币
521
发表于 2022-7-5 17:29:31 | 显示全部楼层
嗨,Kr1stal1。我使用这个lisp来完成这项工作。支持文件选项。
http://www.hawsedc.com/gnu/pointsin.php
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 17:35:01 | 显示全部楼层
Satishrajdev这就是调查csv文件的问题,它们可以在CIV3D中到处都是,你有样式,所以指定csv的外观P、x、y、z、d等。
 
导入csv和基于代码的字符串还有一天要做。
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 17:45:09 | 显示全部楼层
1+
 
 
vlisp建议vl every
 
  1. [color="green"] (list (atof (cadr b)) (atof (caddr b)) (atof (cadddr b)))[/color]

仅供参考
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 13:02 , Processed in 0.623383 second(s), 72 queries .

© 2020-2025 乐筑天下

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