乐筑天下

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

[编程交流] LISP计算长度和w

[复制链接]

1

主题

14

帖子

13

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 15:21:40 | 显示全部楼层 |阅读模式
有没有办法使用LISP计算形状的长度和宽度?例如,获取在楼层平面上绘制的房间的长度和宽度。
 
谢谢
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:28:12 | 显示全部楼层
应该可以,房间是用多段线建造的吗?
回复

使用道具 举报

1

主题

14

帖子

13

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 15:31:08 | 显示全部楼层
是的,它是使用多段线构造的
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:35:35 | 显示全部楼层
又快又脏:
 
  1. (defun c:lenwid    (/ ent nlist d1 d2)
  2.    (if    (and
  3.        (setq ent (car (entsel "\nSelect Object: ")))
  4.        (= "LWPOLYLINE" (cdr (assoc 0 (entget ent))))
  5.    ) ;_  end and
  6.    (progn
  7.        (foreach x (entget ent)
  8.        (if (eq 10 (car x))
  9.            (setq nlist (cons (cdr x) nlist))
  10.        ) ;_  end if
  11.        ) ;_  end foreach
  12.        (setq nlist (reverse nlist))
  13.        (setq d1 (distance (nth 0 nlist)
  14.                   (nth 1 nlist)
  15.             ) ;_  end distance
  16.          d2 (distance (nth 1 nlist)
  17.                   (nth 2 nlist)
  18.             ) ;_  end distance
  19.        ) ;_  end setq
  20.        (if    (> d1 d2)
  21.        (princ (strcat "\nLength of Room = "
  22.                   (rtos d1 2 2)
  23.                   "\tWidth of Room = "
  24.                   (rtos d2 2 2)
  25.               ) ;_  end strcat
  26.        ) ;_  end princ
  27.        (princ (strcat "\nLength of Room = "
  28.                   (rtos d2 2 2)
  29.                   "\tWidth of Room = "
  30.                   (rtos d1 2 2)
  31.               ) ;_  end strcat
  32.        ) ;_  end princ
  33.        ) ;_  end if
  34.    ) ;_  end progn
  35.    (princ "\n<!> No Object Selected or Object is not Polyline! <!>")
  36.    ) ;_  end if
  37.    (princ)
  38. ) ;_  end defun
回复

使用道具 举报

1

主题

14

帖子

13

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 15:38:39 | 显示全部楼层
这将如何在非矩形的房间上工作?
回复

使用道具 举报

1

主题

14

帖子

13

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 15:41:44 | 显示全部楼层
此外,它是否可以显示在形状内部的屏幕上,而不是在命令行中?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:44:02 | 显示全部楼层
 
我说它又快又脏
 
只需快速输入即可。
 
我去看看
回复

使用道具 举报

1

主题

14

帖子

13

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 15:46:54 | 显示全部楼层
哈哈,对不起。
 
谢谢你的帮助。我非常感谢。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:53:01 | 显示全部楼层
这会将文本放入图形中:
 
  1. (defun c:lenwid    (/ ent pt nlist d1 d2 len)
  2.    (defun makelay (x)
  3.    (if (not (tblsearch "Layer" x))
  4.        (progn
  5.        (setvar "cmdecho" 0)
  6.        (command "-layer" "m" x "")
  7.        (setvar "cmdecho" 1)
  8.        ) ;_  end progn
  9.    ) ;_  end if
  10.    ) ;_  end defun
  11.    (makelay "TEXT")
  12.    (defun Make_Text (txt_pt txt_val)
  13.    (entmake
  14.        (list '(0 . "TEXT")
  15.          '(8 . "TEXT")
  16.          (cons 10 txt_pt)
  17.          (cons 40 (max 2.5 (getvar "TEXTSIZE")))
  18.          (cons 1 txt_val)
  19.          '(50 . 0.0)
  20.          '(7 . "STANDARD")
  21.          '(71 . 0)
  22.          '(72 . 1)
  23.          '(73 . 2)
  24.          (cons 11 txt_pt)
  25.        ) ; end list
  26.    ) ; end entmake
  27.    ) ;_  end defun
  28.    (if    (and
  29.        (setq ent (car (entsel "\nSelect Object > ")))
  30.        (= "LWPOLYLINE" (cdr (assoc 0 (entget ent))))
  31.        (setq pt (getpoint "\nSelect Point for Text > "))
  32.    ) ;_  end and
  33.    (progn
  34.        (foreach x (entget ent)
  35.        (if (eq 10 (car x))
  36.            (setq nlist (cons (cdr x) nlist))
  37.        ) ;_  end if
  38.        ) ;_  end foreach
  39.        (setq nlist (reverse nlist))
  40.        (setq d1 (distance (nth 0 nlist)
  41.                   (nth 1 nlist)
  42.             ) ;_  end distance
  43.          d2 (distance (nth 1 nlist)
  44.                   (nth 2 nlist)
  45.             ) ;_  end distance
  46.        ) ;_  end setq
  47.        (if    (> d1 d2)
  48.        (setq len (strcat "Length of Room = "
  49.                  (rtos d1 2 2)
  50.                  ",  Width of Room = "
  51.                  (rtos d2 2 2)
  52.              ) ;_  end strcat
  53.        ) ;_  end setq
  54.        (setq len (strcat "Length of Room = "
  55.                  (rtos d2 2 2)
  56.                  ",  Width of Room = "
  57.                  (rtos d1 2 2)
  58.              ) ;_  end strcat
  59.        ) ;_  end setq
  60.        ) ;_  end if
  61.        (Make_Text pt len)
  62.    ) ;_  end progn
  63.    (princ "\n<!> No Object Selected or Object is not Polyline! <!>")
  64.    ) ;_  end if
  65.    (princ)
  66. ) ;_  end defun
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:55:38 | 显示全部楼层
 
没问题,我理解你的意思-我对Lisp程序也不满意。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 18:21 , Processed in 0.846484 second(s), 72 queries .

© 2020-2025 乐筑天下

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