乐筑天下

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

[编程交流] 将块添加到端点和alig

[复制链接]

4

主题

20

帖子

16

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 10:13:52 | 显示全部楼层 |阅读模式
你好
 
我正在寻找一种lisp,它可以在一条多段线的每个端点上添加一个块(例如箭头),并将其与该多段线对齐。有什么想法吗?
 
提前谢谢你。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:22:43 | 显示全部楼层
我想我最近在这里写过这样的代码:
 
http://www.cadtutor.net/forum/showthread.php?52992-可能在多线点上自动插入块&p=358763&viewfull=1#post358763
 
作为对此的快速修改:
 
  1. ;;-------------------=={ Block At Ends }==--------------------;;
  2. ;;                                                            ;;
  3. ;;  Inserts a Block at each endpoint of a polyline            ;;
  4. ;;------------------------------------------------------------;;
  5. ;;  Author: Lee McDonnell, 2010                               ;;
  6. ;;                                                            ;;
  7. ;;  Copyright © 2010 by Lee McDonnell, All Rights Reserved.   ;;
  8. ;;  Contact: Lee Mac @ TheSwamp.org, CADTutor.net             ;;
  9. ;;------------------------------------------------------------;;
  10. (defun c:BlockAtEnds ( / *error* _StartUndo _EndUndo _Insert _AngleAtParam doc block ss )
  11. (vl-load-com)
  12. ;; © Lee Mac 2010
  13. (setq block "test.dwg") ;; << Block Name
  14. (defun *error* ( msg )
  15.    (and doc (_EndUndo doc))
  16.    (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
  17.        (princ (strcat "\n** Error: " msg " **")))
  18.    (princ)
  19. )
  20. (defun _StartUndo ( doc ) (_EndUndo doc)
  21.    (vla-StartUndoMark doc)
  22. )
  23. (defun _EndUndo ( doc )
  24.    (if (= 8 (logand 8 (getvar 'UNDOCTL)))
  25.      (vla-EndUndoMark doc)
  26.    )
  27. )
  28. (defun _Insert ( block point rotation )
  29.    (entmakex
  30.      (list
  31.        (cons 0 "INSERT")
  32.        (cons 2  block)
  33.        (cons 10 point)
  34.        (cons 50 rotation)
  35.      )
  36.    )
  37. )
  38. (defun _AngleatParam ( entity param )
  39.    (angle '(0. 0. 0.) (vlax-curve-getFirstDeriv entity param))
  40. )      
  41. (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
  42. (cond
  43.    ( (= 4 (logand 4 (cdr (assoc 70 (tblsearch "LAYER" (getvar 'CLAYER))))))
  44.      (princ "\n** Current Layer Locked **")
  45.    )
  46.    ( (not
  47.        (or
  48.          (and (tblsearch "BLOCK" (vl-filename-base block))
  49.            (setq block (vl-filename-base block))
  50.          )
  51.          (and
  52.            (setq block
  53.              (findfile
  54.                (strcat block
  55.                  (if (eq "" (vl-filename-extension block)) ".dwg" "")
  56.                )
  57.              )
  58.            )
  59.            (
  60.              (lambda ( / ocm )
  61.                (setq ocm (getvar 'CMDECHO)) (setvar 'CMDECHO 0)
  62.                (command "_.-insert" block) (command)
  63.                (setvar 'CMDECHO ocm)
  64.                
  65.                (tblsearch "BLOCK" (setq block (vl-filename-base block)))
  66.              )
  67.            )
  68.          )
  69.        )
  70.      )
  71.      (princ "\n** Block not Found **")
  72.    )
  73.    ( (not (setq ss (ssget '((0 . "*POLYLINE")))))
  74.      (princ "\n*Cancel*")
  75.    )
  76.    (t
  77.      (_StartUndo doc)
  78.    
  79.      (
  80.        (lambda ( i / e )
  81.          (while (setq e (ssname ss (setq i (1+ i))))
  82.            (foreach param (list (vlax-curve-getStartParam e) (vlax-curve-getEndParam e))
  83.              (_Insert block (vlax-curve-getPointatParam e param) (_AngleAtParam e param))            
  84.            )
  85.          )
  86.        )
  87.        -1
  88.      )
  89.      (_EndUndo doc)
  90.    )
  91. )
  92. (princ)
  93. )

 
-大卫
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 10:27:25 | 显示全部楼层
很好的解决方案David
 
这可能是表示块插入部分的另一种方式:
 
  1. [b][color=BLACK]([/color][/b]defun c:patha [b][color=FUCHSIA]([/color][/b]/ ss en ed pl[b][color=FUCHSIA])[/color][/b]
  2. [b][color=FUCHSIA]([/color][/b]defun massoc [b][color=NAVY]([/color][/b]key alist / x nlist[b][color=NAVY])[/color][/b]
  3. [b][color=NAVY]([/color][/b]foreach x alist
  4.    [b][color=MAROON]([/color][/b]if [b][color=GREEN]([/color][/b]eq key [b][color=BLUE]([/color][/b]car x[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
  5.        [b][color=GREEN]([/color][/b]setq nlist [b][color=BLUE]([/color][/b]cons [b][color=RED]([/color][/b]cdr x[b][color=RED])[/color][/b] nlist[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  6. [b][color=NAVY]([/color][/b]reverse nlist[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  7. [b][color=FUCHSIA]([/color][/b]while [b][color=NAVY]([/color][/b]or [b][color=MAROON]([/color][/b]not ss[b][color=MAROON])[/color][/b]
  8.              [b][color=MAROON]([/color][/b]/= [b][color=GREEN]([/color][/b]sslength ss[b][color=GREEN])[/color][/b] 1[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  9.         [b][color=NAVY]([/color][/b]princ [color=#2f4f4f]"\nSelect a LWPOLYINE Path"[/color][b][color=NAVY])[/color][/b]
  10.         [b][color=NAVY]([/color][/b]setq ss [b][color=MAROON]([/color][/b]ssget '[b][color=GREEN]([/color][/b][b][color=BLUE]([/color][/b]0 . [color=#2f4f4f]"LWPOLYLINE"[/color][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  11. [b][color=FUCHSIA]([/color][/b]setq en [b][color=NAVY]([/color][/b]ssname ss 0[b][color=NAVY])[/color][/b]
  12.        ed [b][color=NAVY]([/color][/b]entget en[b][color=NAVY])[/color][/b]
  13.        pl [b][color=NAVY]([/color][/b]massoc 10 ed[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  14. [b][color=FUCHSIA]([/color][/b]entmake [b][color=NAVY]([/color][/b]list [b][color=MAROON]([/color][/b]cons 0 [color=#2f4f4f]"INSERT"[/color][b][color=MAROON])[/color][/b][b][color=MAROON]([/color][/b]cons 2 [color=#2f4f4f]"ARROW"[/color][b][color=MAROON])[/color][/b]
  15.                 [b][color=MAROON]([/color][/b]cons 10 [b][color=GREEN]([/color][/b]append [b][color=BLUE]([/color][/b]car pl[b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]list [b][color=RED]([/color][/b]cdr [b][color=PURPLE]([/color][/b]assoc 38 ed[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  16.                 [b][color=MAROON]([/color][/b]cons 50 [b][color=GREEN]([/color][/b]angle [b][color=BLUE]([/color][/b]car pl[b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]cadr pl[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  17. [b][color=FUCHSIA]([/color][/b]entmake [b][color=NAVY]([/color][/b]list [b][color=MAROON]([/color][/b]cons 0 [color=#2f4f4f]"INSERT"[/color][b][color=MAROON])[/color][/b][b][color=MAROON]([/color][/b]cons 2 [color=#2f4f4f]"ARROW"[/color][b][color=MAROON])[/color][/b]
  18.                 [b][color=MAROON]([/color][/b]cons 10 [b][color=GREEN]([/color][/b]append [b][color=BLUE]([/color][/b]last pl[b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]list [b][color=RED]([/color][/b]cdr [b][color=PURPLE]([/color][/b]assoc 38 ed[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  19.                 [b][color=MAROON]([/color][/b]cons 50 [b][color=GREEN]([/color][/b]angle [b][color=BLUE]([/color][/b]last pl[b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]nth [b][color=RED]([/color][/b]1- [b][color=PURPLE]([/color][/b]length pl[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] pl[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  20. [b][color=FUCHSIA]([/color][/b]prin1[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]

 
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:27:57 | 显示全部楼层
非常感谢您的快速回复。
 
不幸的是,我无法让BlockAtEnds工作(命令:BlockAtEnds),patha与我要查找的非常接近,但它只在pline的两端进入块。我想要的是在pline内的每个端点处设置该块。
 
再次感谢你。
回复

使用道具 举报

4

主题

20

帖子

16

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 10:36:48 | 显示全部楼层
李,
 
是的,那也行!对于新手来说,这只是一个更隐晦的问题-大卫
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 10:40:16 | 显示全部楼层
 
出了什么问题?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:44:17 | 显示全部楼层
我刚刚输入了块文件名的完整路径,它成功了。但它只在多段线的两端添加块。我想在pline内的每个端点添加该块。
 
谢谢您
回复

使用道具 举报

4

主题

20

帖子

16

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 10:50:06 | 显示全部楼层
 
我想你指的是顶点…-看看我之前发布的链接
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:53:45 | 显示全部楼层
端点和垂直点之间有很大的区别
 
这不适用于圆弧分段的多段线路径
 
  1. (repeat 2
  2. (entmake (list (cons 0 "INSERT") (cons 2 "ARROW")
  3.                 (cons 10 (append (car pl) (list (cdr (assoc 38 ed)))))
  4.                 (cons 50 (angle (car pl) (cadr pl)))))
  5. (setq pl (reverse pl))
  6. )

 
-大卫
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 10:59:51 | 显示全部楼层
这使用了曲线函数,作为对该链接中发布内容的修改:
 
[code]-----------------=={Block At Vertices}==---------------;;;;在选定多段线的每个顶点插入块;;;;旋转到顶点后的线段角度。;;;------------------------------------------------------------;;;;作者:李·麦克唐纳,2010;;;;版权所有©2010 Lee McDonnell,保留所有权利;;;;联系人:Lee Mac@TheSwamp。组织,CADTutor。net;;;;-----------------------------------------------------------------;;(defun c:块顶点(/*error*_StartUndo _EndUndo _Insert _AngleAtParam doc block ss)(vl load com);;©Lee Mac 2010(setq block“test.dwg”);;
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-5 21:42 , Processed in 1.855739 second(s), 72 queries .

© 2020-2025 乐筑天下

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