乐筑天下

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

[编程交流] 仅对外部进行尺寸标注。。

[复制链接]

5

主题

21

帖子

16

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-5 15:15:51 | 显示全部楼层 |阅读模式
大家好,
 
 
我必须在平面图上标注数百个看台(绘制为闭合多段线)。
我发现Lisp在“支架”的所有侧面都有尺寸。问题是我不需要内部尺寸,所以目前我使用4个Lisp。。选择所有左侧支架lisp添加左侧尺寸,底部支架lisp添加底部尺寸等。
 
 
 
 
有谁能帮我写一个只标注外部而不标注内部(多段线重叠处)的代码来阻止我变灰吗。
我认为附上的图片描述得更好。
祈祷吧!
161555xqqa4i1rr1firqrq.jpg
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 15:21:42 | 显示全部楼层
获取所有点,然后删除内部点。
 
 
然后需要一个时钟排序例程,以便点位于列表中。然后执行dim pt1 pt2等。
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 15:24:34 | 显示全部楼层
 
如果平面图是正方形的,IMO是可行的。
 
我的建议(如果是平方规划)边界框偏移内部说1%s获得交叉删除内部尺寸更容易?
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 15:27:10 | 显示全部楼层
好主意。用锤子敲打它,而不是花几个小时努力解决它。现在有一段时间了。
回复

使用道具 举报

5

主题

21

帖子

16

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-5 15:30:07 | 显示全部楼层
您好,很抱歉,我们已经确定了更多展位的尺寸!
我希望场地是方形的——没有这样的运气。
我附上了一张展台轮廓图,以便你能看到我的痛苦。。
基本展位轮廓。图纸
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2022-7-5 15:31:57 | 显示全部楼层
 
根据您的示例图形,这里是一个良好的开端。
 
  1. (defun c:foo (/ lm:makereadable _colinear a b d out p pp s th)
  2. ;; RJP 05.03.2018
  3. ;; Labels exterior edges of 'stands' with edge length
  4. (defun _colinear (p1 p2 p3 f) (equal (+ (distance p1 p2) (distance p2 p3)) (distance p1 p3) f))
  5. ;; Make Readable  -  Lee Mac
  6. ;; Returns a given angle corrected for text readability
  7. (defun lm:makereadable (a)
  8.    ((lambda (a)
  9.       (if (and (< (* pi 0.5) a) (<= a (* pi 1.5)))
  10. (+ a pi)
  11. a
  12.       )
  13.     )
  14.      (rem (+ a pi pi) (+ pi pi))
  15.    )
  16. )
  17. (cond
  18.    ((setq s (ssget '((0 . "lwpolyline") (8 . "BoothOutline"))))
  19.     (setq th 500)
  20.     (foreach pl (vl-remove-if 'listp (mapcar 'cadr (ssnamex s)))
  21.       (setq p (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= 10 (car x))) (entget pl))))
  22.       (setq p
  23.       (mapcar '(lambda (a b)
  24.                  (list (polar a (angle a b) (* 0.5 (setq d (distance a b)))) a b (angle a b) d)
  25.                )
  26.               p
  27.               (append (cdr p) (list (car p)))
  28.       )
  29.       )
  30.       (setq out (cons p out))
  31.     )
  32.     (foreach pt (setq out (apply 'append out))
  33.       (and
  34. (null (vl-remove-if-not
  35.          '(lambda (x)
  36.             (or (equal (car pt) (car x) 1e-1) (_colinear (cadr x) (car pt) (caddr x) 1e-1))
  37.           )
  38.          (vl-remove pt out)
  39.        )
  40. )
  41. (setq pp (polar (car pt) (- (cadddr pt) (/ pi 2.)) th))
  42. (entmakex (list '(0 . "TEXT")
  43.                  '(100 . "AcDbEntity")
  44.                  '(8 . "BoothOutlineLength")
  45.                  '(100 . "AcDbText")
  46.                  (cons 10 pp)
  47.                  (cons 40 th)
  48.                  '(62 . 1)
  49.                  (cons 1 (rtos (/ (last pt) 1000.) 2 0))
  50.                  (cons 50 (lm:makereadable (cadddr pt)))
  51.                  '(72 . 1)
  52.                  (cons 11 pp)
  53.                  '(100 . "AcDbText")
  54.                  '(73 . 2)
  55.            )
  56. )
  57.       )
  58.     )
  59.    )
  60. )
  61. (princ)
  62. )
  63. (vl-load-com)
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 15:37:18 | 显示全部楼层
韩,你好,
 
 
尝试学习编码,但类似的事情我做不到——当代码中有注释时,它会有所帮助,这样你就知道发生了什么。
 
 
 
 
不确定您是否打算将代码作为“独立的”it错误错误错误列表放在Ronjonp中?
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2022-7-5 15:40:46 | 显示全部楼层
 
很高兴听到你在学习
你说得对,这并不简单。
您不能简单地添加代码,导致列表格式错误-缺少括号或括号()或额外的括号!要进行调试,请命令VLIDE或VLISP打开编辑器
 
子函数需要提供参数。
我用附加参数cw修改了之前的post#13 outline_TX函数。请重新复制
快速脏测试
你试着画两个逆时针和顺时针的矩形来测试。。
  1. (defun [b][color="blue"]outline_TX[/color][/b] (p1 p2 h [color="red"][b][u]cw[/u][/b][/color] / pl d ro)
  2. ;hanhphuc
  3. (setq pl (mapcar ''((x) (list (car x) (cadr x))) (list p1 p2)))
  4. (mapcar ''((a b) (set a (apply b pl))) '(ro d) '(angle distance))
  5. (entmakex
  6.    (mapcar 'cons
  7.     '(0 100 100 1 10 40 50 8 71 72)
  8.     (list "MTEXT"
  9.           "AcDbEntity"
  10.           "AcDbMText"
  11. [color="red"]                  (if (or [b][u]cw[/u][/b](< (* pi 0.5) ro (* pi 1.5)) )
  12.             (strcat (rtos d 2) "\\P ")
  13.             (strcat "\\P " (rtos d 2))
  14.             )[/color]
  15.           (apply 'mapcar (cons ''((a b) (/ (+ a b) 2.)) pl )
  16.           (if (zerop h)
  17.             (/ d[color="red"] 10.[/color])
  18.             h
  19.             )
  20.           ([color="red"]LM:[/color]MakeReadable ro)
  21.           "OUT"
  22.           5
  23.           5
  24.           )
  25.     )
  26.    )
  27. (princ)
  28. )
回复

使用道具 举报

5

主题

21

帖子

16

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-5 15:41:30 | 显示全部楼层
谢谢韩,我很感激你的帮助,但我觉得自己快淹死了!
 
 
我发现如果我加上Ronjonp的密码
它将文本放在外面-这样做有问题吗?
 
 
  1. (setvar 'luprec 2)

 
抱歉,500内部服务器错误,回复帖子非常痛苦
 
在我看来,作为新手,你很难做到,
nvm我尽我所能提供帮助,例如在Ronjop的代码中,只需替换这一部分
  1. (defun c:foo (/ lm:makereadable _colinear a b d out p pp s th)
  2. ;; RJP 05.03.2018
  3. ;; Labels exterior edges of 'stands' with edge length
  4. (defun _colinear (p1 p2 p3 f) (equal (+ (distance p1 p2) (distance p2 p3)) (distance p1 p3) f))
  5. ;; Make Readable  -  Lee Mac
  6. ;; Returns a given angle corrected for text readability
  7. (defun lm:makereadable (a)
  8.    ((lambda (a)
  9.       (if (and (< (* pi 0.5) a) (<= a (* pi 1.5)))
  10. (+ a pi)
  11. a
  12.       )
  13.     )
  14.      (rem (+ a pi pi) (+ pi pi))
  15.    )
  16. )
  17. (cond
  18.    ((setq s (ssget '((0 . "lwpolyline") (8 . "BoothOutline"))))
  19.     (setq th 500)
  20.     (foreach pl (vl-remove-if 'listp (mapcar 'cadr (ssnamex s)))
  21.       (setq p (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= 10 (car x))) (entget pl))))
  22.       (setq p
  23.       (mapcar '(lambda (a b)
  24.    (list (polar a (angle a b) (* 0.5 (setq d (distance a b)))) a b (angle a b) d)
  25.         )
  26.        p
  27.        (append (cdr p) (list (car p)))
  28.       )
  29.       )
  30.       (setq out (cons p out))
  31.     )
  32.     (foreach pt (setq out (apply 'append out))
  33.       (and
  34. (null (vl-remove-if-not
  35.   '(lambda (x)
  36.      (or (equal (car pt) (car x) 1e-1) (_colinear (cadr x) (car pt) (caddr x) 1e-1))
  37.    )
  38.   (vl-remove pt out)
  39.        )
  40. )
  41. (setq pp (polar (car pt) (- (cadddr pt) (/ pi 2.)) th))
  42. (setvar 'luprec 2)
  43. (entmakex (list '(0 . "TEXT")
  44.    '(100 . "AcDbEntity")
  45.    '(8 . "BoothDim")
  46.    '(100 . "AcDbText")
  47.    (cons 10 pp)
  48.    (cons 40 th)
  49.    '(62 . 1)
  50.    (cons 1 (rtos (/ (last pt) 1000.) 2 2))
  51.    (cons 50 (lm:makereadable (cadddr pt)))
  52.    '(72 . 1)
  53.    (cons 11 pp)
  54.    '(100 . "AcDbText")
  55.    '(73 . 2)
  56.     )
  57. )
  58.       )
  59.     )
  60.    )
  61. )
  62. (princ)
  63. )
  64. (vl-load-com)

 
对此。
 
  1. 5

 
很简单吧?(OUTLINE\u TX from startpoint to endpoint Text\u Height顺时针\u谓词)
; 有4个参数。蓝色是函数符号,深紫色是参数
如你们所见,我还使用了李的函数LM:list顺时针-p
回复

使用道具 举报

5

主题

21

帖子

16

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-5 15:46:59 | 显示全部楼层
 
真正地根据您提供的示例图形,它似乎工作正常。请注意,此代码只查看直边。如果您有一条带凸起的边,它将返回不正确的长度。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-14 13:04 , Processed in 0.584159 second(s), 75 queries .

© 2020-2025 乐筑天下

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