乐筑天下

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

[编程交流] 帮助:使用此lisp进行修改

[复制链接]

8

主题

50

帖子

42

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-6 12:03:20 | 显示全部楼层 |阅读模式
我需要你的帮助来修改这个lisp一个lisp信用证先生“麦克李”,而不是坐标,我想通过绘制“纬度和经度”
 
附件:
测验txt文件
BDimp。LSP
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:07:07 | 显示全部楼层
这是对原文的改写(但仍然是笛卡尔式的):
 
  1. (defun c:bdimp (/ StrBrk mk_pt mk_txt FILE LST NL PT)
  2. (vl-load-com)
  3. (defun StrBrk (str chrc / pos lst)
  4.    (while (setq pos (vl-string-position chrc str))
  5.      (setq lst (cons (substr str 1 pos) lst)
  6.            str (substr str (+ pos 4)))) ;;Mod
  7.    (reverse (cons str lst)))
  8. (defun mk_pt (p) (entmake (list '(0 . "POINT") '(8 . "COORD") (cons 10 p))))
  9.    
  10. (defun mk_txt  (pt val)
  11.    (entmake (list (cons 0 "TEXT")
  12.                   (cons 8 "POINT NUMBER")
  13.                   (cons 10 pt)
  14.                   (cons 40 1.6)
  15.                   (cons 1  val))))
  16.    
  17. (if (setq file (getfiled "Select Text File" (if *load$file* *load$file* "") "txt" 16))
  18.    (progn
  19.      (setq *load$file* file file (open file "r"))
  20.      
  21.      (while (setq nl (read-line file))
  22.        (setq lst (cons (StrBrk nl 32) lst))) (close file)
  23.      
  24.      (foreach line lst        
  25.        (mk_pt (setq pt (mapcar 'distof (list (cadr line) (caddr line) "0"))))
  26.        (mk_txt pt (car line)))))
  27.    
  28. (princ))  
回复

使用道具 举报

8

主题

50

帖子

42

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-6 12:11:56 | 显示全部楼层
我搞错了李先生
“错误DXF组:(10 nil nil 0.0)”
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:16:33 | 显示全部楼层
 
我确实说过上面是笛卡尔的。我猜你用经度/纬度试过了。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:19:56 | 显示全部楼层
我从未将经度转换为纬度,因此这对我来说是一个学习练习,但我在这段代码中的方法是:
[列表]
  • 将Deg Min Sec转换为弧度
  • 使用球面极,将弧度转换为笛卡尔(使用地球半径)。
  • 绘制结果。
    [/列表]
    1. ;; Plotting Longitude/Latitude  ~  Lee McDonnell (Lee Mac)  ~  12.12.2009
    2. (defun c:bdimp (/ rad StrBrk mk_pt mk_txt get_radians get_cartesian FILE LST NL PT)
    3. (vl-load-com)
    4. (setq rad 6378.1) [color=Red][b] ;; Radius of Earth (km)[/b][/color]
    5. (defun StrBrk (str chrc shift / pos lst)
    6.    (while (setq pos (vl-string-position chrc str))
    7.      (setq lst (cons (substr str 1 pos) lst)
    8.            str (substr str (+ pos shift 2)))) ;;Mod
    9.    (reverse (cons str lst)))
    10. (defun mk_pt (p) (entmake (list '(0 . "POINT") '(8 . "COORD") (cons 10 p))))
    11.    
    12. (defun mk_txt  (pt val)
    13.    (entmake (list (cons 0 "TEXT")
    14.                   (cons 8 "POINT NUMBER")
    15.                   (cons 10 pt)
    16.                   (cons 40 1.6)
    17.                   (cons 1  val))))
    18. [color=Red][b]  (defun get_radians (deg mins secs)
    19.    (* pi (/ (+ deg (/ mins 60.) (/ secs 3600.)) 180.)))
    20. (defun get_cartesian (r theta phi)
    21.    (mapcar (function (lambda (x) (if (equal x 0. 1e- 0. x)))
    22.      (list (* r (cos theta) (cos phi))
    23.            (* r (cos theta) (sin phi))
    24.            (* r (sin theta)))))[/b][/color]
    25.    
    26. (if (setq file (getfiled "Select Text File" (if *load$file* *load$file* "") "txt" 16))
    27.    (progn
    28.      (setq *load$file* file file (open file "r"))
    29.      
    30.      (while (setq nl (read-line file))
    31.        (setq lst (cons (StrBrk nl 32 2) lst))) (close file)
    32.      
    33.      (foreach line lst  
    34.        (mk_pt (setq pt
    35.                 (apply 'get_cartesian
    36.                   (cons rad
    37.                     (mapcar
    38.                       (function
    39.                         (lambda (x)
    40.                           (apply 'get_radians (mapcar 'distof (StrBrk x 45 0))))) (cdr line))))))
    41.        (mk_txt pt (car line)))))
    42.    
    43. (princ))  

     
    如果有人能验证我的方法,以便我进一步了解,我将不胜感激
  • 回复

    使用道具 举报

    8

    主题

    50

    帖子

    42

    银币

    初来乍到

    Rank: 1

    铜币
    40
    发表于 2022-7-6 12:21:49 | 显示全部楼层
    我想我搞砸了李先生,怎么做这个,我也试过这个样本。。。
     
    1   123-44-10   8-03-43
    2   123-44-12   8-03-41
    3   123-44-06   8-03-37
    4   123-44-04   8-03-39
    5   123-44-03   8-03-34
    6   123-44-01   8-03-37
     
    基于我的文件。
     
    回复

    使用道具 举报

    114

    主题

    1万

    帖子

    1万

    银币

    中流砥柱

    Rank: 25

    铜币
    543
    发表于 2022-7-6 12:27:57 | 显示全部楼层
    我最新的代码帖子应该使用经度/纬度,假设使用3空间分隔符。
    回复

    使用道具 举报

    8

    主题

    50

    帖子

    42

    银币

    初来乍到

    Rank: 1

    铜币
    40
    发表于 2022-7-6 12:30:36 | 显示全部楼层
    这是李先生的作品。。但是有一个错误,纬度和经度是不同的。。
     

                                   
    登录/注册后可看大图
    回复

    使用道具 举报

    114

    主题

    1万

    帖子

    1万

    银币

    中流砥柱

    Rank: 25

    铜币
    543
    发表于 2022-7-6 12:33:19 | 显示全部楼层
    是的,它可以是任何数量的东西-半径,例如我的方法。
    回复

    使用道具 举报

    8

    主题

    50

    帖子

    42

    银币

    初来乍到

    Rank: 1

    铜币
    40
    发表于 2022-7-6 12:35:13 | 显示全部楼层
    好吧,等一下,李先生,明天快1:30了。。谢谢你。
    回复

    使用道具 举报

    发表回复

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

    本版积分规则

    • 微信公众平台

    • 扫描访问手机版

    • 点击图片下载手机App

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

    GMT+8, 2025-3-5 10:09 , Processed in 0.563913 second(s), 75 queries .

    © 2020-2025 乐筑天下

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