乐筑天下

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

[编程交流] 将直线更改为矩形

[复制链接]

3

主题

12

帖子

9

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 00:00:26 | 显示全部楼层
pBe否没有多段线
我们只有一些线,如案例1中所示,并希望将它们更改为案例2,与它们的中心点相关。
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 00:01:51 | 显示全部楼层
 
 
可以发誓拼写成普林
 
试试这个:
 
  1. (defun c:l2r ( /  ss e ent ang pts)
  2.      (if (not width) (setq width 1.00))
  3.      (setq width (cond
  4.                       ((getdist
  5.                              (strcat "\nEnter Width <"
  6.                                      (rtos width 2 2)
  7.                                      ">: ")))
  8.                       (width)))
  9. (if          (setq ss (ssget '((-4 . "<OR")
  10.            (-4 . "<AND")(0 . "LWPOLYLINE")(90 . 2)(42 . 0)(-4 . "AND>")
  11.            (0 . "LINE")(-4 . "OR>"))))
  12.     (repeat (setq i (sslength ss))
  13.       (setq e (ssname ss (Setq i (1- i))))
  14.       (setq ent (entget e)
  15.      ang (angle        (setq sp (vlax-curve-getStartPoint e))
  16.                 (setq ep (vlax-curve-getendPoint e))
  17.          )
  18.       )
  19.       (setq pts (mapcar
  20.            '(lambda (pt)
  21.               (list (setq
  22.                       p_ (polar pt (+ ang (/ pi 2.0)) (* 0.5 width))
  23.                     )
  24.                     (polar p_ (+ ang (* pi 1.5)) width)
  25.               )
  26.             )
  27.            (list sp ep)
  28.          )
  29.      pts (apply 'append (list (car pts) (reverse (cadr pts))))
  30.       )
  31.       (entmakex
  32. (append (list (cons 0 "LWPOLYLINE")
  33.                (cons 100 "AcDbEntity")
  34.                (assoc 8 ent)
  35.                (cons 100 "AcDbPolyline")
  36.                (cons 90 (length pts))
  37.                (cons 70 1)
  38.          )
  39.          (mapcar (function (lambda (p) (cons 10 p))) pts)
  40. )
  41.       )
  42.       (entdel e)
  43.     )
  44.   )
  45. )

 
多段/弧段
 
  1. (defun c:l2r2 ( /  ss i e pts ob)
  2. (setq pac (getvar 'peditaccept))
  3. (setvar 'peditaccept 1)
  4.      (if (not width) (setq width 1.00))
  5.      (setq width (cond
  6.                       ((getdist
  7.                              (strcat "\nEnter Width <"
  8.                                      (rtos width 2 2)
  9.                                      ">: ")))
  10.                       (width)))  
  11.   (if (setq ss (ssget '((0 . "LWPOLYLINE,LINE"))))
  12.   (repeat (setq i (sslength ss))
  13.                   (setq e (ssname ss (Setq i (1- i))) sss (ssadd))
  14.                 (setq pts (mapcar
  15.                             '(lambda (y)
  16.                                (list (vlax-curve-getStartPoint y)
  17.                                        (vlax-curve-getEndPoint y)
  18.                                      )
  19.                                )
  20.                         (mapcar 'car
  21.                               (mapcar
  22.                                 '(lambda (x)
  23.                                    (setq ob (vlax-invoke
  24.                                      (vlax-ename->vla-object e)
  25.                                      'Offset
  26.                                      x
  27.                                    )
  28.                                 )         
  29.                                    (ssadd (entlast) sss)
  30.                                         ob
  31.                                  )
  32.                                 (list (setq h (* 0.5 width))
  33.                                       (- h)
  34.                                 )
  35.                               )
  36.                                 )
  37.                             )
  38.                       )
  39.                     (mapcar '(lambda (k l)
  40.                            (entmakex (list (cons 0 "LINE") (cons 10 k) (cons 11 l)))
  41.                            (ssadd (entlast) sss)
  42.                            )
  43.                         (car pts)(cadr pts)
  44.                         )
  45.                    (command "_.pedit" "_m" sss ""  "_j" 0.0 "")
  46.             (entdel e)
  47.     )
  48. )
  49. (setvar 'peditaccept pac)
  50. (princ)
  51. )
回复

使用道具 举报

51

主题

481

帖子

457

银币

后起之秀

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

铜币
262
发表于 2022-7-6 00:06:47 | 显示全部楼层
检查这个
还有这个
回复

使用道具 举报

3

主题

12

帖子

9

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 00:09:50 | 显示全部楼层
谢谢pBe。你是个天才。我该怎么做作为回报?我可以存钱吗?
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 00:15:11 | 显示全部楼层
为什么不打一个简单的PEDIT电话?
 
  1. Command: pedit
  2. Select polyline: (pause) or ename
  3. Object selected is not a polyline
  4. Do you want to turn it into one? <Y> y
  5. Close/Join/Width/Edit vertex/Fit/Spline/Decurve/Ltype gen/Undo/eXit <X>: Width
  6. Enter new width for all segments: 0.5
  7. Close/Join/Width/Edit vertex/Fit/Spline/Decurve/Ltype gen/Undo/eXit <X>:eXit

 
-大卫
回复

使用道具 举报

4

主题

194

帖子

192

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-6 00:18:49 | 显示全部楼层
 
这是(青蛙毛)一个新的,与“青蛙屁股防水吗?”。
回复

使用道具 举报

3

主题

12

帖子

9

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 00:20:35 | 显示全部楼层
 
pedit编辑宽度只是改变线条的可见性,但pBe编写的代码将线条重塑为矩形,这有助于用户通过捕捉模式解决方案根据矩形的边缘和侧面绘制更多细节。
回复

使用道具 举报

0

主题

1

帖子

1

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 00:25:00 | 显示全部楼层
我也试了一下。但我的代码有点凌乱,没有pBe的那么清晰。而且它的兼容性没有经过测试。
 
干杯
 
  1. ; Covert multiple lines or plines to rectangles with given width
  2. ; 21 MAR 2014 @ MELBOURNE
  3. ; [email="yxinst@gmail.com"]yxinst@gmail.com[/email]
  4. (vl-load-com)
  5. (princ)
  6. (defun c:L2REC (/ _ss->lst subl2rec ss obs odist )
  7. (defun _ss->lst (sset / i lst)
  8.    (setq i 0)
  9.    (while (< i (sslength sset))
  10.      (setq lst (cons (vlax-ename->vla-object (ssname sset i)) lst))
  11.      (setq i (+ i 1))
  12.    )
  13.    lst
  14. )
  15. ;offset in 2 directions and link ends
  16. (defun subl2rec (oblst dist / l1 l2 l3 l4 temp pt11 pt12 pt21 pt22)
  17.    (mapcar '(lambda (x)
  18.        (setq l1 (vlax-vla-object->ename
  19.     (car (vlax-safearray->list
  20.     (vlax-variant-value (vla-offset x dist))
  21.          )
  22.     )
  23.   )
  24.       l2 (vlax-vla-object->ename
  25.     (car (vlax-safearray->list
  26.     (vlax-variant-value (vla-offset x (- 0 dist)))
  27.          )
  28.     )
  29.   )
  30.        )
  31.        (if (/= "LINE" (cdr (assoc 0 (entget l1))))
  32.   (progn (command "_explode" l1)
  33.   (setq l1 (entlast))
  34.   (command "_explode" l2)
  35.   (setq l2 (entlast))
  36.   )
  37.        )
  38.        (setq pt11 (cdr (assoc 10 (entget l1)))
  39.       pt12 (cdr (assoc 11 (entget l1)))
  40.       pt21 (cdr (assoc 10 (entget l2)))
  41.       pt22 (cdr (assoc 11 (entget l2)))
  42.        )
  43.        (if (equal (distance pt11 pt22) (* 2 dist))
  44.   (setq temp pt22
  45.         pt22 pt21
  46.         pt21 temp
  47.   )
  48.        )
  49.        (command "_line" pt11 pt21 "")
  50.        (setq l3 (entlast))
  51.        (command "_line" pt12 pt22 "")
  52.        (setq l4 (entlast))
  53.        (command "_pedit" l1 "y" "j" l3 "" "j" l2 "" "j" l4 "" "")
  54.      )
  55.     oblst
  56.    )
  57. )
  58. (princ "Select multiple lines or plines please.")
  59. (setq ss (ssget))
  60. (setq obs (_ss->lst ss))
  61. (setq odist (/ (getreal "Width?: ") 2))
  62. (subl2rec obs odist)
  63. (command "erase" ss "")
  64. (princ)
  65. )
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 00:19 , Processed in 1.758630 second(s), 66 queries .

© 2020-2025 乐筑天下

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