乐筑天下

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

[编程交流] 尺寸断开连接

[复制链接]

27

主题

146

帖子

119

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
137
发表于 2022-7-5 22:27:21 | 显示全部楼层 |阅读模式
这是需求的影响:
232724xxr11z6zz9066j1r.png
 
但是,现实是这样的:
232726a9b6m6lulult2tmx.png
 
也希望这样:
232727d33bm5j7ob1o9b7p.png
 
大家好!我需要帮助!
 
  1. (vl-load-com)
  2. (defun c:test (/ n x ent entL p2 p3 px1 px2 py1 py2 ptdd xl sa pt0 ppt ptdd)
  3. (setvar "cmdecho" 0)
  4. (command "undo" "be")
  5. (setq entL '())
  6. (if (setq ent (centsel "\nChoose Dimension or <EXIT>:" "DIMENSION"))
  7.   (progn
  8.     (setq x (entget ent)
  9.        entL (cons ent entL)
  10.          p2 (dxf 13 x)
  11.          p3 (dxf 14 x)
  12.          px1 (list (car p2) (/ (+ (cadr p2)(cadr p3)) 2.0))
  13.          px2 (list (car p3) (/ (+ (cadr p2)(cadr p3)) 2.0))
  14.          py1 (list (/ (+ (car p2)(car p3)) 2.0) (cadr p2))
  15.          py2 (list (/ (+ (car p2)(car p3)) 2.0) (cadr p3))
  16.          ptdd (list p2 p3)
  17.          XL (entget (dxf -2 (tblsearch "block" (dxf 2 x))))
  18.          SA (abs (sin (angle (dxf 10 xl) (dxf 11 xl)))))
  19.   (while (setq pt0 (getpoint "\nPick point or <EXIT>:"))
  20.       (command ".copy" ent "" "0,0" "@")
  21.       (setq entL (cons (entlast) entL))
  22.    (cond
  23.      ((equal SA 1 1e-6) ;;horizonta
  24.         (setq ptdd (cons (ptper pt0 px1 px2) ptdd)
  25.                 ppt (Lsort ptdd 0))
  26.        )
  27.      ((equal SA 0 1e-6) ;;vertical
  28.         (setq ptdd (cons (ptper pt0 py1 py2) ptdd)
  29.                ppt (Lsort ptdd 1))
  30.       )
  31.       (t (setq ptdd (cons (ptper pt0 p2 p3) ptdd)
  32.            ppt (Lsort ptdd 2)))
  33.      )
  34.       (setq ppL (mapcar 'list ppt (cdr ppt))
  35.              n 0)
  36.         (repeat (length ppL)
  37.           (setq xf (entget (nth n entL))
  38.                nxf (subst (cons 13 (car  (nth n ppL)))(assoc 13 xf) xf)
  39.                wxf (subst (cons 14 (cadr (nth n ppL)))(assoc 14 nxf) nxf)
  40.                n (1+ n))
  41.           (entmod wxf)
  42.         )
  43.     ))
  44. (princ "\nEXIT")
  45. )
  46. (command "undo" "e") (setvar "cmdecho" 1)
  47. (princ)
  48. )
  49. (defun centsel (msg f)
  50. (while (if (setq el (car (entsel msg))) (if (= (cdr (assoc 0 (entget el))) f) nil t) nil)) el
  51. )
  52. ;;dxf
  53. (defun dxf (x e)(cdr (assoc x e)))
  54. ;;pedal
  55. (defun ptper (pt0 pt1 pt2)
  56. (inters pt0 (polar pt0 (+ (angle pt1 pt2) (/ pi 2)) 1.0) pt1 pt2 nil)
  57. )
  58. ;;sorting  0 horizonta 1 vertical 2 Oblique
  59. (defun Lsort (LT i)
  60. (cond
  61. ((or (= i 0)(= i 2))(setq Lt (vl-sort LT (function (lambda (e1 e2)(< (car e1) (car e2)))))))
  62. ((or (= i 1)(= i 2))(setq Lt (vl-sort LT (function (lambda (e1 e2)(< (cadr e1) (cadr e2)))))))
  63. ))
  64. (princ)
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 22:34:00 | 显示全部楼层
我没有运行代码,但可能有一种不同的方法,采用两个版本HOR&VER,选择stpt next endpt,然后为中间DIM和最终顶层的调整级别选择一个点。所以你们有一个pt列表,你们知道第一个和最后一个,然后运行dim命令,只使用一个循环作为开始和结束点。这样可以在移动时绘制DIM,而不是进行调整。
回复

使用道具 举报

7o7

0

主题

93

帖子

93

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 22:38:31 | 显示全部楼层
您更改此段落:
  1. (cond
  2.   ((equal SA 1 1e-6)
  3.    ;;horizonta
  4.    (setq ptdd (cons pt0 ptdd)
  5.          ppt  (Lsort ptdd 0)
  6.    )
  7.   )
  8.   ((equal SA 0 1e-6)
  9.    ;;vertical
  10.    (setq ptdd (cons pt0 ptdd)
  11.          ppt  (Lsort ptdd 1)
  12.    )
  13.   )
  14.   (t
  15.    (setq ptdd (cons pt0 ptdd)
  16.          ppt  (Lsort ptdd 2)
  17.    )
  18.   )
  19. )
回复

使用道具 举报

27

主题

146

帖子

119

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
137
发表于 2022-7-5 22:45:39 | 显示全部楼层
 
好啊谢谢你,先生。
但是,维度变得越来越高和越来越低。
 
232729ybkrnro1lc7kknn7.png
回复

使用道具 举报

7o7

0

主题

93

帖子

93

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 22:48:26 | 显示全部楼层
这取决于你的风格设置。你能用dimstyles上传你的文件吗?
回复

使用道具 举报

27

主题

146

帖子

119

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
137
发表于 2022-7-5 22:53:23 | 显示全部楼层
 
尊敬的先生:
谢谢,dimstyles是默认设置。我使用新文档。
测验图纸
回复

使用道具 举报

7o7

0

主题

93

帖子

93

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 22:58:27 | 显示全部楼层
您还必须更改此段落:
  1. (setq ppL (mapcar 'list ppt (cdr ppt))             
  2.       n          0
  3.       tt10 (cdr (assoc 10 (entget (nth n entL))))
  4. )
  5. (repeat        (length ppL)
  6.   (setq        xf  (entget (nth n entL))
  7.         nxf (subst (cons 13 (car (nth n ppL))) (assoc 13 xf) xf)
  8.         wxf (subst (cons 14 (cadr (nth n ppL))) (assoc 14 nxf) nxf)
  9.         wxf (subst (cons 10 tt10) (assoc 10 wxf) wxf)
  10.         n   (1+ n)
  11.   )
  12.   (entmod wxf)
  13. )
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 23:03:29 | 显示全部楼层
使用命令:dimcontinue
回复

使用道具 举报

27

主题

146

帖子

119

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
137
发表于 2022-7-5 23:09:36 | 显示全部楼层
 
尊敬的先生:。
我真的很感谢你的帮助。我测试过了。非常好!敬佩你!
这是另一个维度合并,多个合并为一个。
但需要尺寸对齐一条线,否则,无法合并。
如下图所示。
第一种情况可以合并。
第二种情况无法合并,因为维度未对齐。
232732le8daxemjj662ffs.png
 
如果不对齐,还可以合并。
  1. (defun c:test( / ss ic xic aa bb n ent1)
  2. (setvar "cmdecho" 0)
  3. (command "undo" "be")
  4. (princ "\nPlease choose dimension for merge ")
  5. (setq ss (ssget '((0 . "DIMENSION")))
  6.      sumn (sslength ss) n 0 xss '() aa '())
  7. (repeat sumn (setq xss (cons (ssname ss n) xss) n (1+ n)))
  8. (while (car xss)
  9. (setq bb '()
  10.        bb (cons (car xss) bb)
  11.        ic (getxx (entget (car xss)))
  12.        xss (cdr xss)
  13.        yss xss)
  14. (while (car yss)
  15.    (setq ent1 (car yss)
  16.           xic (getxx (entget ent1)))
  17.     (if (apply 'and (mapcar '(lambda(x y)(equal x y 1e-5)) xic ic))
  18.         (setq bb (cons ent1 bb)
  19.              xss (vl-remove ent1 xss)))
  20.         (setq yss (cdr yss)))
  21.   (setq aa (cons bb aa))
  22. )
  23. (setq n 0)
  24. (repeat (length aa)
  25. (setq ent1 (nth n aa) n (1+ n))
  26. (if (cdr ent1)(progn
  27.    (setq ptx (getmxy ent1)
  28.          xf (entget (car ent1))
  29.         nxf (subst (cons 13 (car  ptx))(assoc 13 xf) xf)
  30.         wxf (subst (cons 14 (cadr ptx))(assoc 14 nxf) nxf)
  31.          xx (cdr ent1))
  32.    (entmod wxf)
  33.    (while xx (entdel (car xx)) (setq xx (cdr xx)))
  34. ))
  35. )
  36. (command "undo" "e") (setvar "cmdecho" 1)
  37. (princ)
  38. )
  39. (defun dxf (x e)(cdr (assoc x e)))
  40. (defun getxx(x / xy xl a b bb)
  41. (setq xy (dxf 10 x)
  42.      xl (entget (dxf -2 (tblsearch "block" (dxf 2 x))))
  43.       A (angle (dxf 10 xl) (dxf 11 xl)))
  44. (cond
  45.   ((equal (abs (sin A)) 1 1e-6) ;;horizonta
  46.      (list (cadr xy) (sin A)))
  47.   ((equal (sin A) 0 1e-6) ;;vertical
  48.      (list (car xy) (sin A)))
  49.   (t (setq B (+ A (* 0.5 pi))
  50.           bb (- (cadr xy) (* (/ (sin B)(cos B)) (car xy))))
  51.      (list bb (sin A)))
  52. )
  53. )
  54. (defun getmxy(ssent / ptx xx yy A xl sa)
  55. (foreach x ssent
  56.    (setq ptx (cons (dxf 13 (entget x)) ptx)
  57.          ptx (cons (dxf 14 (entget x)) ptx)))
  58. (setq xl (entget (dxf -2 (tblsearch "block" (dxf 2 (entget (car ssent))))))
  59.       A (angle (dxf 10 xl) (dxf 11 xl)))
  60. (cond
  61.      ((equal SA 1 1e-6) (setq ppt (Lsort ptx 0)))
  62.      ((equal SA 0 1e-6) (setq ppt (Lsort ptx 1)))
  63.       (t (setq ppt (Lsort ptx 2)))
  64. )(list (car ppt)(last ppt))
  65. )
  66. (defun Lsort (LT i)
  67. (cond
  68. ((or (= i 0)(= i 2))(setq Lt (vl-sort LT (function (lambda (e1 e2)(< (car e1) (car e2)))))))
  69. ((or (= i 1)(= i 2))(setq Lt (vl-sort LT (function (lambda (e1 e2)(< (cadr e1) (cadr e2)))))))
  70. ))
  71. (princ)
回复

使用道具 举报

27

主题

146

帖子

119

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
137
发表于 2022-7-5 23:15:11 | 显示全部楼层
 
亲爱的Tharwat。非常感谢。我知道“继续”
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 06:37 , Processed in 0.546095 second(s), 75 queries .

© 2020-2025 乐筑天下

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