乐筑天下

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

[编程交流] 将旋转功能添加到

[复制链接]

10

主题

30

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-6 09:49:24 | 显示全部楼层 |阅读模式
祝大家新年快乐,
 
我想知道是否有人可以帮我在这个lisp例程中添加旋转命令。
 
这是惯例;
 
(定义c:1(/*error*oldLayer layerName pt)
 
;; 错误处理程序
(defun*错误*无
(如果是oldLayer
(setvar‘clayer oldLayer)))
 
;; 主代码
(setq oldLayer(getvar’clayer))
(如果(不是(tblsearch“layer”(setq layerName“generalplumbingstack”))
(命令“.-layer”“\u new”layerName”“))
(setvar’clayer layerName)
(提示“\n>>指定插入点:”)
(while(/=nil(setq pt(getpoint)))
(命令“.-insert”“plumbingstack1-30”pt pause”“0”)
(setvar’clayer oldLayer)
(普林斯)
 
谢谢你的帮助。
回复

使用道具 举报

32

主题

1166

帖子

1146

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
159
发表于 2022-7-6 09:53:01 | 显示全部楼层
只需为旋转角度添加另一个暂停。
 
  1. (command "._-insert" "plumbingstack1-30" pt pause pause))
回复

使用道具 举报

32

主题

1166

帖子

1146

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
159
发表于 2022-7-6 09:56:58 | 显示全部楼层
顺便说一句,如果你不介意的话,请编辑你的帖子,把代码放在代码括号里。
请参见此处:http://www.cadtutor.net/forum/showthread.php?9184-代码发布指南
 
此外,代码的编写方式还有其他问题。我建议你再检查一下你的代码。
 
 
这就是添加代码括号时的外观。
  1. (defun c:1 (/ *error* oldLayer layerName pt)
  2. ;; Error handler
  3. (defun *error* nil
  4. (if oldLayer
  5. (setvar 'clayer oldLayer)))
  6. ;; Main code
  7. (setq oldLayer (getvar 'clayer))
  8. (if (not (tblsearch "layer" (setq layerName "generalplumbingstack")))
  9. (command "._-layer" "_new" layerName ""))
  10. (setvar 'clayer layerName)
  11. (prompt "\n >> Specify Insertion Points: ")
  12. (while (/= nil (setq pt (getpoint)))
  13. (command "._-insert" "plumbingstack1-30" pt pause "" 0))
  14. (setvar 'clayer oldLayer)
  15. (princ))

 
 
提示:您的错误处理程序需要一些工作。
回复

使用道具 举报

32

主题

1166

帖子

1146

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
159
发表于 2022-7-6 09:59:16 | 显示全部楼层
我组装了这个让你试试。根据需要进行调整。
 
  1. (defun c:1 (/ *error* bs layerName pt ra SUS SUS_LST TERR)
  2. (setq SUS_LST (list "clayer")
  3.        SUS     (mapcar 'getvar SUS_LST)
  4.        TERR *error*
  5.       *error* ETRAP)
  6. (MAIN)
  7. (princ))
  8. (princ "1.lsp loaded...")
  9. (princ "\nType 1 to start program.")
  10. ;
  11. ; Main code
  12. ;
  13. (defun MAIN ()
  14. (setq layername "generalplumbingstack")
  15. (if (not (tblsearch "layer" layername))
  16.    (command "._-layer" "_m" layerName ""))
  17. (if (/= (setq pt (getpoint "\nInsertion pt: ")) nil)
  18.    (progn
  19.      (setq bs (getint "\nBlock scale: "))
  20.      (setq ra (getint "\nRotation angle: "))
  21.      (command "._-insert" "plumbingstack1-30" pt bs bs ra)
  22.    )
  23. )
  24. (RUS)
  25. (princ))
  26. (princ)
  27. ;
  28. ; Restore User Settings
  29. ;
  30. (defun RUS ()
  31. (setq *error* TERR)
  32. (if SUS (mapcar 'setvar SUS_LST SUS))
  33. (princ "\n1.lsp has completed and will now restore your settings and exit.")
  34. (princ))
  35. (princ)
  36. ;
  37. ; Error Trap
  38. ;
  39. (defun ETRAP (EMSG)
  40. (command nil nil nil)
  41. (if (not (member EMSG '("console break" "Function cancelled")))
  42.    (princ (strcat "\nError:" EMSG)))
  43. (if SUS (mapcar 'setvar SUS_LST SUS))
  44. (princ
  45.    (strcat "\n1.lsp has encountered a user error!"
  46.            "\nProgram will now restore your settings and exit."))
  47. (setq *error* TERR)
  48. (terpri)
  49. (princ))
  50. (princ)

 
 
我想指出的是,最好在命令调用上使用entmake解决方案
回复

使用道具 举报

10

主题

30

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-6 10:04:44 | 显示全部楼层
非常感谢你的帮助!我也会尝试这个新的程序。
 
我的另一个快速问题是创建一个具有可编辑文本的块。这可能吗?如果可能,我将如何创建它?
 
再次感谢!
回复

使用道具 举报

32

主题

1166

帖子

1146

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
159
发表于 2022-7-6 10:06:24 | 显示全部楼层
没问题,但我只是在上一篇文章中做了一些小的修改。试试那个。
 
关于你的问题,你是指属性吗?
 
 
 
 
附件是一个样例代码,其中包含一个对话框,该对话框将块定义及其属性存储在代码中。它使用entmake和dxf数据。
 
不确定这是不是你想走的路线,但我想我会把它公布出来。
确保两个文件都位于ACAD搜索支持路径中。
BLKLIB。拉链
回复

使用道具 举报

32

主题

1166

帖子

1146

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
159
发表于 2022-7-6 10:11:32 | 显示全部楼层
为了给你一个关于如何进行块定义的想法,我将在分解状态下获取块,并获取块中每个项目的dxf数据。
 
 
以下是程序中三个块的定义。然而,它们有一个共同的属性。如果您的属性将具有不同的标记,那么代码的编写可能会有所不同。attcahed PDXF。下面的lsp用于从每个实体获取dxf数据。在AutoCAD Developer帮助部分中,有一节介绍DXF数据以及每种类型实体所需的数据类型。
PDXF。lsp将显示数据,您将复制该数据以用于块定义。我建议你提出关于这个主题的其他观点,这里有很多。在我看来,大卫·贝瑟尔是DXF之王。李在这方面也有很多很棒的帖子。
 
为了让我们双方都更容易理解,请尽量复习代码,然后再回到这个主题,回答您的问题。我会尽力回答。有很多信息需要涵盖。
 
 
  1. (defun BLKLIB_BD ()
  2. (entmake
  3.    (list
  4.      (cons 0   "block")
  5.      (cons 2    SYM)
  6.      (cons 10  (list 0.0 0.0 0.0))
  7.      (cons 70   2)))
  8. (cond
  9.    ((= SYM "TRI")
  10.     (entmake
  11.       (list
  12.         (cons 0   "LWPOLYLINE")
  13.         (cons 100 "AcDbEntity")
  14.         (cons 8   "0")
  15.         (cons 100 "AcDbPolyline")
  16.         (cons 90   3)
  17.         (cons 70   1)
  18.         (cons 43   0.0)
  19.         (cons 10  (list -0.00016575 0.288101))
  20.         (cons 10  (list -0.249503 -0.143763))
  21.         (cons 10  (list 0.249171 -0.143763)))))
  22.    ((= SYM "SQR")
  23.     (entmake
  24.       (list
  25.         (cons 0   "LWPOLYLINE")
  26.         (cons 100 "AcDbEntity")
  27.         (cons 8   "0")
  28.         (cons 100 "AcDbPolyline")
  29.         (cons 90   4)
  30.         (cons 70   1)
  31.         (cons 43   0.0)
  32.         (cons 10  (list -0.288267 0.287769))
  33.         (cons 10  (list -0.287604 -0.288432))
  34.         (cons 10  (list  0.288598 -0.287769))
  35.         (cons 10  (list  0.287935 0.288432)))))
  36.    ((= SYM "CIR")
  37.     (entmake
  38.       (list
  39.         (cons 0   "CIRCLE")
  40.         (cons 100 "AcDbEntity")
  41.         (cons 8   "0")
  42.         (cons 100 "AcDbCircle")
  43.         (cons 10  (list  0.00016575 9.53592e-008 0.0))
  44.         (cons 40   0.288101)))))
  45. (entmake
  46.    (list
  47.      (cons 0   "ATTDEF")
  48.      (cons 100 "AcDbEntity")
  49.      (cons 8    ALAY)
  50.      (cons 100 "AcDbText")
  51.      (cons 10  (list -0.158648 0.404835 0.0))
  52.      (cons 40   0.09375)
  53.      (cons 1    AVAL)
  54.      (cons 7   "Romans")
  55.      (cons 71   0)
  56.      (cons 72   1)
  57.      (cons 11  (list -0.00016575 0.373585 0.0))
  58.      (cons 100 "AcDbAttributeDefinition")
  59.      (cons 3   "Text:")
  60.      (cons 2   "TEXT")
  61.      (cons 70   
  62.      (cons 73   0)
  63.      (cons 74   1)))
  64. (entmake
  65.    (list
  66.      (cons 0  "endblk")
  67.      (cons 8   "0")))
  68. (princ))
  69. (princ)

PDXF。LSP
回复

使用道具 举报

10

主题

30

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-6 10:11:47 | 显示全部楼层
我会通过并尝试让我的模块与此一起工作,并在我完成一些测试后返回给您。
 
再次感谢您的帮助。
回复

使用道具 举报

32

主题

1166

帖子

1146

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
159
发表于 2022-7-6 10:15:36 | 显示全部楼层
 
好的,但是因为你可能不熟悉entmake,让你理解这一切可能需要一些时间。如果你能给我提供一些积木,我可以帮你开始。还有另一种方法可以将块的路径放在程序中,避免将entmake解决方案放在一起,但这完全取决于您。此外,这可以在有或没有DCL的情况下完成,因为您可能不熟悉DCL编程。
 
让我知道你想做什么。
回复

使用道具 举报

10

主题

30

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-6 10:18:35 | 显示全部楼层
我正试图上传一到两个我的符号,但我相信我的办公室有某种防火墙,不允许我上传
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-7 00:04 , Processed in 0.911207 second(s), 72 queries .

© 2020-2025 乐筑天下

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