乐筑天下

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

[编程交流] 需要autolisp

[复制链接]

9

主题

43

帖子

34

银币

初来乍到

Rank: 1

铜币
45
发表于 2022-7-6 08:52:08 | 显示全部楼层 |阅读模式
需要:在多行中设置2层
095214ko3dzgd7ho7tl5hh.jpg
095216v6yy2kky2dk58kz3.jpg
回复

使用道具 举报

62

主题

466

帖子

404

银币

后起之秀

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

铜币
310
发表于 2022-7-6 08:58:45 | 显示全部楼层
很快完成。。
 
我对此不满意
  1. (defun c:test ( / addpolyline *error* pt p2 pts e _offset1 _offset2 _layer1 _layer2 )
  2. ;|v set offset and layers here v|;
  3. (setq _offset1 2.)
  4. (setq _layer1 "0")
  5. (setq _offset2 (+ _offset1 0.5))
  6. (setq _layer2 "Defpoints")
  7. ;|^ set offset and layers here ^|;
  8. (vl-load-com)
  9. (defun addpolyline ( pointslst layer closed flag / e )
  10.    (setq e
  11.      (entmakex
  12.        (append
  13.          (list
  14.            (cons 0 "LWPOLYLINE")
  15.            (cons 100 "AcDbEntity")
  16.            (cons 100 "AcDbPolyline")
  17.            (cons 90 (length pointslst))
  18.            (cons 70 (if closed 1 0))
  19.            (cons 8 layer)
  20.            (cons 43 0.0)
  21.          )
  22.          (mapcar
  23.            (function
  24.              (lambda ( x )
  25.                (if (listp x)(cons 10 x)
  26.                  (cons 42 x)
  27.                )
  28.              )
  29.            ) pointslst
  30.          )
  31.        )
  32.      )
  33.    )
  34.    (if (and e flag)
  35.      (vlax-ename->vla-object e) e
  36.    )
  37. )
  38. (defun *error* ( msg )
  39.    (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
  40.         (princ (strcat "\n** Error: " msg " **"))
  41.    )
  42.    (princ)
  43. )
  44. (if
  45.    (and (setq pt (getpoint "\nSpecify starting point: "))
  46.      (setq pts (cons pt pts))
  47.    )
  48.    (while (setq p2 (getpoint pt "\nSpecify next point: "))
  49.      (and e (mapcar (function vla-delete) e))
  50.      (
  51.        (lambda ( p )
  52.          (setq e
  53.            (apply (function append)
  54.              (mapcar
  55.                (function
  56.                  (lambda ( x y / o )
  57.                    (setq o (vlax-invoke p 'Offset y))
  58.                    (vla-put-layer (car o) _layer2)
  59.                    (append (vlax-invoke p 'Offset x) o)
  60.                  )
  61.                ) (list _offset1 (- _offset1))
  62.                  (list _offset2 (- _offset2))
  63.              )
  64.            )
  65.          ) (vla-delete p)
  66.        )
  67.        (addpolyline (setq pts (cons (setq pt p2) pts))
  68.          _layer1 nil t
  69.        )
  70.      )
  71.    )
  72. )
  73. )
回复

使用道具 举报

9

主题

43

帖子

34

银币

初来乍到

Rank: 1

铜币
45
发表于 2022-7-6 09:04:27 | 显示全部楼层
谢谢你,但我希望函数能证明到底部、顶部和零
回复

使用道具 举报

62

主题

466

帖子

404

银币

后起之秀

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

铜币
310
发表于 2022-7-6 09:13:27 | 显示全部楼层
有几分钟。。
 
  1. (defun c:test ( / addpolyline *error* p pt p2 pts e _offset1 _offset2 _layer1 _layer2 )
  2. ;|v set offset and layers here v|;
  3. (setq _offset1 2.)
  4. (setq _layer1 "0")
  5. (setq _offset2  0.5)
  6. (setq _layer2 "Defpoints")
  7. ;|^ set offset and layers here ^|;
  8. (vl-load-com)
  9. (defun addpolyline ( pointslst layer closed flag / e )
  10.    (setq e
  11.      (entmakex
  12.        (append
  13.          (list
  14.            (cons 0 "LWPOLYLINE")
  15.            (cons 100 "AcDbEntity")
  16.            (cons 100 "AcDbPolyline")
  17.            (cons 90 (length pointslst))
  18.            (cons 70 (if closed 1 0))
  19.            (cons 8 layer)
  20.            (cons 43 0.0)
  21.          )
  22.          (mapcar
  23.            (function
  24.              (lambda ( x )
  25.                (if (listp x)(cons 10 x)
  26.                  (cons 42 x)
  27.                )
  28.              )
  29.            ) pointslst
  30.          )
  31.        )
  32.      )
  33.    )
  34.    (if (and e flag)
  35.      (vlax-ename->vla-object e) e
  36.    )
  37. )
  38. (defun *error* ( msg )
  39.    (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
  40.         (princ (strcat "\n** Error: " msg " **"))
  41.    )
  42.    (princ)
  43. )
  44. (and (not *testcommandjustification*)
  45.    (setq *testcommandjustification* "Center")
  46. )
  47. (while
  48.    (and
  49.      (not pt)
  50.      (not
  51.        (prompt
  52.          (strcat "\n\n** Current Justification: " *testcommandjustification* " **")
  53.        )
  54.      )
  55.      (not (initget 1 "Justification"))
  56.      (setq pt (getpoint "\nSpecify starting point or [Justification]: "))
  57.    )
  58.    (cond ( (listp pt) (setq pts (cons pt pts)) )
  59.      (t (initget 1 "Top Bottom Center")
  60.        (setq *testcommandjustification*
  61.          (getkword "\nSpecify justification [Top/Bottom/Center]: ")
  62.          pt nil
  63.        )
  64.      )
  65.    )
  66. )
  67. (while (and pts (setq p2 (getpoint pt "\nSpecify next point: ")))
  68.    (and e (mapcar (function vla-delete) e))
  69.    (
  70.      (lambda ( p )
  71.        (cond
  72.          ( (eq *testcommandjustification* "Center")
  73.            (setq e
  74.              (apply (function append)
  75.                (mapcar
  76.                  (function
  77.                    (lambda ( x y / o )
  78.                      (setq o (vlax-invoke p 'Offset y))
  79.                      (vla-put-layer (car o) _layer2)
  80.                      (append (vlax-invoke p 'Offset x) o)
  81.                    )
  82.                  ) (list (* 0.5 _offset1) (- (* 0.5 _offset1)))
  83.                    (list (+ (* 0.5 _offset1) _offset2)
  84.                      (- (+ (* 0.5 _offset1) _offset2))
  85.                    )
  86.                )
  87.              )
  88.            ) (vla-delete p)
  89.          )
  90.          ( (eq *testcommandjustification* "Bottom")
  91.            (setq e
  92.              (append (list p)
  93.                (mapcar
  94.                  (function
  95.                    (lambda ( o la )
  96.                      (setq p
  97.                        (car
  98.                          (vlax-invoke p 'offset o)
  99.                        )
  100.                      )
  101.                      (vla-put-layer p la) p
  102.                    )
  103.                  )
  104.                  (list _offset2 _offset1 _offset2)
  105.                  (list _layer1 _layer1 _layer2)
  106.                )
  107.              )
  108.            )
  109.          )
  110.          ( (eq *testcommandjustification* "Top")
  111.            (setq e
  112.              (append (list p)
  113.                (mapcar
  114.                  (function
  115.                    (lambda ( o la )
  116.                      (setq p
  117.                        (car
  118.                          (vlax-invoke p 'offset o)
  119.                        )
  120.                      )
  121.                      (vla-put-layer p la) p
  122.                    )
  123.                  )
  124.                  (list (- _offset2)(- _offset1)(- _offset2))
  125.                  (list _layer1 _layer1 _layer2)
  126.                )
  127.              )
  128.            )
  129.          )
  130.        )
  131.      )
  132.      (addpolyline (setq pts (cons (setq pt p2) pts))
  133.        (if (eq *testcommandjustification* "Center") _layer1 _layer2) nil t
  134.      )
  135.    )
  136. ) (princ)
  137. )
回复

使用道具 举报

9

主题

43

帖子

34

银币

初来乍到

Rank: 1

铜币
45
发表于 2022-7-6 09:15:08 | 显示全部楼层
非常感谢。非常酷的lisp,请在内线(层“0”)之间插入自动填充功能
回复

使用道具 举报

62

主题

466

帖子

404

银币

后起之秀

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

铜币
310
发表于 2022-7-6 09:22:22 | 显示全部楼层
我明天会解决这个问题。
回复

使用道具 举报

62

主题

466

帖子

404

银币

后起之秀

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

铜币
310
发表于 2022-7-6 09:29:49 | 显示全部楼层
如果这对你有效,请告诉我
 
这个Lisp程序看起来很可怕!
  1. (defun c:test ( / pairpts addpolyline *error* ad as p pt p2 pts e _offset1 _offset2 _layer1 _layer2 o3 ph h )
  2. ;|v set offset and layers here v|;
  3. (setq _offset1 2.)
  4. (setq _layer1 "0")
  5. (setq _offset2  0.5)
  6. (setq _layer2 "Defpoints")
  7. (setq _hatch "ansi31")
  8. (setq _hatchscale 1.)
  9. (setq _hatchangle (* pi 0.75))
  10. ;|^ set offset and layers here ^|;
  11. (vl-load-com)
  12.    (defun pairpts ( _list / l pt )
  13.    (foreach x (reverse _list)
  14.      (if pt
  15.        (setq l (cons (cons x pt) l) pt nil)
  16.        (setq pt (cons x pt))
  17.      )
  18.    ) l
  19. )
  20. (defun addpolyline ( pointslst layer closed flag / e )
  21.    (setq e
  22.      (entmakex
  23.        (append
  24.          (list
  25.            (cons 0 "LWPOLYLINE")
  26.            (cons 100 "AcDbEntity")
  27.            (cons 100 "AcDbPolyline")
  28.            (cons 90 (length pointslst))
  29.            (cons 70 (if closed 1 0))
  30.            (cons 8 layer)
  31.            (cons 43 0.0)
  32.          )
  33.          (mapcar
  34.            (function
  35.              (lambda ( x )
  36.                (if (listp x)(cons 10 x)
  37.                  (cons 42 x)
  38.                )
  39.              )
  40.            ) pointslst
  41.          )
  42.        )
  43.      )
  44.    )
  45.    (if (and e flag)
  46.      (vlax-ename->vla-object e) e
  47.    )
  48. )
  49. (defun *error* ( msg )
  50.    (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
  51.         (princ (strcat "\n** Error: " msg " **"))
  52.    )
  53.    (princ)
  54. )
  55. (defun ad nil
  56.    (setq *acdoc*
  57.      (cond  ( *acdoc* )
  58.        ( (vlax-get (vlax-get-acad-object)
  59.            'ActiveDocument
  60.          )
  61.        )
  62.      )
  63.    )
  64. )
  65. (defun as nil (ad)
  66.    (cond
  67.      ( (eq AcModelSpace (vlax-get *acdoc* 'ActiveSpace))
  68.        (vlax-get *acdoc* 'ModelSpace)
  69.      )
  70.      ( (vlax-get *acdoc* 'PaperSpace) )
  71.    )
  72. )
  73. (and (not *testcommandjustification*)
  74.    (setq *testcommandjustification* "Center")
  75. )
  76. (while
  77.    (and
  78.      (not pt)
  79.      (not
  80.        (prompt
  81.          (strcat "\n\n** Current Justification: " *testcommandjustification* " **")
  82.        )
  83.      )
  84.      (not (initget 1 "Justification"))
  85.      (setq pt (getpoint "\nSpecify starting point or [Justification]: "))
  86.    )
  87.    (cond ( (listp pt) (setq pts (cons pt pts)) )
  88.      (t (initget 1 "Top Bottom Center")
  89.        (setq *testcommandjustification*
  90.          (getkword "\nSpecify justification [Top/Bottom/Center]: ")
  91.          pt nil
  92.        )
  93.      )
  94.    )
  95. )
  96. (while (and pts (setq p2 (getpoint pt "\nSpecify next point: ")))
  97.    (and e (mapcar (function vla-delete) e))
  98.    (
  99.      (lambda ( p )
  100.        (cond
  101.          ( (eq *testcommandjustification* "Center")
  102.            (setq e
  103.              (apply (function append)
  104.                (mapcar
  105.                  (function
  106.                    (lambda ( x y / o )
  107.                      (setq o (vlax-invoke p 'Offset y))
  108.                      (vla-put-layer (car o) _layer2)
  109.                      (setq o3
  110.                        (cons
  111.                          (car
  112.                            (vlax-invoke p 'Offset x)
  113.                          ) o3
  114.                        )
  115.                      ) o
  116.                    )
  117.                  ) (list (* 0.5 _offset1) (- (* 0.5 _offset1)))
  118.                    (list (+ (* 0.5 _offset1) _offset2)
  119.                      (- (+ (* 0.5 _offset1) _offset2))
  120.                    )
  121.                )
  122.              )
  123.            ) (vla-delete p)
  124.          )
  125.          ( (eq *testcommandjustification* "Bottom")
  126.            (setq e
  127.              (append (list p)
  128.                (vl-remove-if (function not)
  129.                  (mapcar
  130.                    (function
  131.                      (lambda ( o la )
  132.                        (setq p
  133.                          (car
  134.                            (vlax-invoke p 'offset o)
  135.                          )
  136.                        )
  137.                        (vla-put-layer p la)
  138.                        (if (eq la _layer1)
  139.                          (progn (setq o3(cons p o3)) nil)
  140.                          p
  141.                        )
  142.                      )
  143.                    )
  144.                    (list _offset2 _offset1 _offset2)
  145.                    (list _layer1 _layer1 _layer2)
  146.                  )
  147.                )
  148.              )
  149.            )
  150.          )
  151.          ( (eq *testcommandjustification* "Top")
  152.            (setq e
  153.              (append (list p)
  154.                (vl-remove-if (function not)
  155.                  (mapcar
  156.                    (function
  157.                      (lambda ( o la )
  158.                        (setq p
  159.                          (car
  160.                            (vlax-invoke p 'offset o)
  161.                          )
  162.                        )
  163.                        (vla-put-layer p la)
  164.                        (if (eq la _layer1)
  165.                          (progn (setq o3(cons p o3)) nil)
  166.                          p
  167.                        )
  168.                      )
  169.                    )
  170.                    (list (- _offset2)(- _offset1)(- _offset2))
  171.                    (list _layer1 _layer1 _layer2)
  172.                  )
  173.                )
  174.              )
  175.            )
  176.          )
  177.        )
  178.        (setq e
  179.          (cons
  180.            (setq ph
  181.              (addpolyline
  182.                (append
  183.                  (pairpts (vlax-get (car o3) 'Coordinates))
  184.                  (reverse (pairpts (vlax-get (cadr o3) 'Coordinates)))
  185.                ) _layer1 t t
  186.              )
  187.            ) e
  188.          )
  189.        )(mapcar (function vla-delete) o3)
  190.        (setq o3 nil)  
  191.        (setq h
  192.          (vla-addhatch (as)
  193.            acHatchPatternTypePredefined _hatch :vlax-true
  194.          )
  195.        )
  196.        (vlax-invoke h 'AppendOuterLoop (list ph))
  197.        (vlax-invoke h 'Evaluate)
  198.        (vla-put-patternscale h _hatchscale)
  199.        (vla-put-patternangle h _hatchangle)
  200.        (vla-put-layer h _layer1)
  201.        (setq e (cons h e))
  202.      )
  203.      (addpolyline (setq pts (cons (setq pt p2) pts))
  204.        (if (eq *testcommandjustification* "Center") _layer1 _layer2) nil t
  205.      )
  206.    )
  207. ) (vla-regen (ad) acactiveviewport) (princ)
  208. )
回复

使用道具 举报

9

主题

43

帖子

34

银币

初来乍到

Rank: 1

铜币
45
发表于 2022-7-6 09:34:32 | 显示全部楼层
对它的工作设置层,请设置图案填充角度135度。非常感谢。
回复

使用道具 举报

62

主题

466

帖子

404

银币

后起之秀

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

铜币
310
发表于 2022-7-6 09:38:11 | 显示全部楼层
以上代码已更新
回复

使用道具 举报

9

主题

43

帖子

34

银币

初来乍到

Rank: 1

铜币
45
发表于 2022-7-6 09:45:56 | 显示全部楼层
非常感谢你,伙计
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-7 06:31 , Processed in 0.842076 second(s), 75 queries .

© 2020-2025 乐筑天下

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