乐筑天下

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

[编程交流] lisp的一些帮助

[复制链接]

1

主题

1

帖子

0

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 07:14:57 | 显示全部楼层 |阅读模式
在离开这个行业多年后,我正在努力自学一些Lisp程序的语言。所以我有个问题。我想用一点宏语言和一点lisp创建一个工具栏宏。。。我有一点工作要做改变属性。这些都是非常标准的,只有一个默认值,块名始终是相同的。我想做的,并且已经做的是更改属性default。如果变化总是一样的,这相对容易。我希望能够将其更改为可变。。因此,我使用了简单的lisp语句。
我拥有的是:使用(setq a(getstring“what?”)将变量放在一起。。然后我尝试在适当的“更改为什么”提示下将其传递到-attedit命令中。。。但我无法获得获取变量的命令。我尝试了各种方法(“首先使用lisp位,然后尝试!变量在“change to”点”,“尝试将lisp放在“change to”点,尝试将整个内容放在lisp中,就像引号中的所有“命令和提示”一样),但我不知所措。。。任何帮助都将不胜感激。。
总结一下:如何在“更改为”提示符处将变量字符串传递给attedit命令。。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 07:49:08 | 显示全部楼层
您通常会编写一个lisp来完成整个过程,而不是使用-attedit来完成某种形式的实体更新过程。这里是一个更新标题块lisp作为一个例子,它是一个更大的开始,它提出问题,并读取布局名称作为块更新的一部分。感谢Lee mac解析代码。
 
  1. ; change the 410 to layout name
  2. ;;-------------------=={ Parse Numbers }==--------------------;;
  3. ;;                                                            ;;
  4. ;;  Parses a list of numerical values from a supplied string. ;;
  5. ;;------------------------------------------------------------;;
  6. ;;  Author: Lee Mac, Copyright © 2011 - [url="http://www.lee-mac.com"]www.lee-mac.com[/url]       ;;
  7. ;;------------------------------------------------------------;;
  8. ;;  Arguments:                                                ;;
  9. ;;  s - String to process                                     ;;
  10. ;;------------------------------------------------------------;;
  11. ;;  Returns:  List of numerical values found in string.       ;;
  12. ;;------------------------------------------------------------;;
  13. (defun LM:ParseNumbers ( s )
  14. (
  15.    (lambda ( l )
  16.      (read
  17.        (strcat "("
  18.          (vl-list->string
  19.            (mapcar
  20.              (function
  21.                (lambda ( a b c )
  22.                  (if
  23.                    (or
  24.                      (< 47 b 58)
  25.                      (and (= 45 b) (< 47 c 58) (not (< 47 a 58)))
  26.                      (and (= 46 b) (< 47 a 58) (< 47 c 58))
  27.                    )
  28.                    b 32
  29.                  )
  30.                )
  31.              )
  32.              (cons nil l) l (append (cdr l) (list nil))
  33.            )
  34.          )
  35.          ")"
  36.        )
  37.      )
  38.    )
  39.    (vl-string->list s)
  40. )
  41. )
  42. ; update title block by BIGAL july 2012
  43. ;(defun ah:sheetupdate1 (ss1 lay plotabs tabname dwgname)
  44. (defun ah:sheetupdate1 ()
  45. (setq doc (vla-get-activedocument (vlax-get-acad-object)))
  46. (vlax-for lay (vla-get-Layouts doc)
  47. (setq plotabs (cons (vla-get-name lay) plotabs))
  48. )
  49. (setq title "Please enter dwg number")
  50. (ah:getval title)
  51. (setq dwgname item)
  52. (setq newstr4 (getstring "\nPlease enter version for all sheets <Cr> no change "))
  53. (princ "0")
  54. (setq len (length plotabs))
  55. (setq x 0)
  56. (setq bname "DA1DRTXT")
  57. (repeat len
  58. (setq tabname (nth x plotabs))
  59. (if (/= tabname "Model")
  60.    (progn
  61.      (setvar "ctab" tabname)
  62.      (setq ss1 (ssget "x"  (list (cons 0 "INSERT") (cons 2 bname)(cons 410 tabname))))
  63.      (setq dwgnum (Lm:parsenumbers tabname))
  64.      (setq sheetnum (car dwgnum))
  65.      (setq oldtag1 "SHT_NO") ;attribute tag name
  66.      (setq newstr1 (rtos sheetnum 2 0))
  67.      (setq oldtag2 "DRG_NO") ;attribute tag name
  68.      (setq oldtag3 "PROJ_NO") ;attribute tag name
  69.      (setq newstr3 dwgname)
  70.      (setq oldtag4 "REV_NO") ;attribute tag name
  71. ; if less than 10
  72. (if (< (car dwgnum) 10.0)
  73.      (setq newstr2 (strcat dwgname "-D0"  (rtos sheetnum 2 0)))
  74.      (setq newstr2 (strcat dwgname "-D"  (rtos sheetnum 2 0)))
  75. )
  76.      (foreach att (vlax-invoke (vlax-ename->vla-object (ssname SS1 0 )) 'getattributes)
  77.        (if (= oldtag1 (strcase (vla-get-tagstring att)))
  78.        (vla-put-textstring att newstr1)
  79.        ) ; end if
  80.        (if (= oldtag2 (strcase (vla-get-tagstring att)))
  81.        (vla-put-textstring att newstr2)
  82.        ) ; end if
  83.        (if (= oldtag3 (strcase (vla-get-tagstring att)))
  84.        (vla-put-textstring att newstr3)
  85.        ) ; end if
  86.        (if (and (/= version nil) (= oldtag4 (strcase (vla-get-tagstring att))) )
  87.        (vla-put-textstring att newstr4)
  88.        ) ; end if
  89.       ) ; end foreach
  90.    ) ; end progn
  91. ) ; end if
  92. (setq x (+ x 1))
  93. ) ; end repeat
  94. (setq ss1 nil)  
  95. ) ; end defun ah
  96. (ah:sheetupdate1)
  97. (princ)
回复

使用道具 举报

0

主题

1

帖子

1

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 08:04:51 | 显示全部楼层
你好
 
是否有任何lisp例程可以更新图形文件中许多布局中的标题栏。
 
谢谢
 
DM公司
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 08:22:41 | 显示全部楼层
这就是上面帖子中的代码所做的!2种方法进入每个布局并做一些事情,或者只做上述DWG中包含的所有事情。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-8-15 13:58 , Processed in 2.551327 second(s), 61 queries .

© 2020-2025 乐筑天下

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