将旋转功能添加到
祝大家新年快乐,我想知道是否有人可以帮我在这个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)
(普林斯)
谢谢你的帮助。 只需为旋转角度添加另一个暂停。
(command "._-insert" "plumbingstack1-30" pt pause pause))
顺便说一句,如果你不介意的话,请编辑你的帖子,把代码放在代码括号里。
请参见此处:http://www.cadtutor.net/forum/showthread.php?9184-代码发布指南
此外,代码的编写方式还有其他问题。我建议你再检查一下你的代码。
这就是添加代码括号时的外观。
(defun c:1 (/ *error* oldLayer layerName pt)
;; Error handler
(defun *error* nil
(if oldLayer
(setvar 'clayer oldLayer)))
;; Main code
(setq oldLayer (getvar 'clayer))
(if (not (tblsearch "layer" (setq layerName "generalplumbingstack")))
(command "._-layer" "_new" layerName ""))
(setvar 'clayer layerName)
(prompt "\n >> Specify Insertion Points: ")
(while (/= nil (setq pt (getpoint)))
(command "._-insert" "plumbingstack1-30" pt pause "" 0))
(setvar 'clayer oldLayer)
(princ))
提示:您的错误处理程序需要一些工作。 我组装了这个让你试试。根据需要进行调整。
(defun c:1 (/ *error* bs layerName pt ra SUS SUS_LST TERR)
(setq SUS_LST (list "clayer")
SUS (mapcar 'getvar SUS_LST)
TERR *error*
*error* ETRAP)
(MAIN)
(princ))
(princ "1.lsp loaded...")
(princ "\nType 1 to start program.")
;
; Main code
;
(defun MAIN ()
(setq layername "generalplumbingstack")
(if (not (tblsearch "layer" layername))
(command "._-layer" "_m" layerName ""))
(if (/= (setq pt (getpoint "\nInsertion pt: ")) nil)
(progn
(setq bs (getint "\nBlock scale: "))
(setq ra (getint "\nRotation angle: "))
(command "._-insert" "plumbingstack1-30" pt bs bs ra)
)
)
(RUS)
(princ))
(princ)
;
; Restore User Settings
;
(defun RUS ()
(setq *error* TERR)
(if SUS (mapcar 'setvar SUS_LST SUS))
(princ "\n1.lsp has completed and will now restore your settings and exit.")
(princ))
(princ)
;
; Error Trap
;
(defun ETRAP (EMSG)
(command nil nil nil)
(if (not (member EMSG '("console break" "Function cancelled")))
(princ (strcat "\nError:" EMSG)))
(if SUS (mapcar 'setvar SUS_LST SUS))
(princ
(strcat "\n1.lsp has encountered a user error!"
"\nProgram will now restore your settings and exit."))
(setq *error* TERR)
(terpri)
(princ))
(princ)
我想指出的是,最好在命令调用上使用entmake解决方案 非常感谢你的帮助!我也会尝试这个新的程序。
我的另一个快速问题是创建一个具有可编辑文本的块。这可能吗?如果可能,我将如何创建它?
再次感谢! 没问题,但我只是在上一篇文章中做了一些小的修改。试试那个。
关于你的问题,你是指属性吗?
附件是一个样例代码,其中包含一个对话框,该对话框将块定义及其属性存储在代码中。它使用entmake和dxf数据。
不确定这是不是你想走的路线,但我想我会把它公布出来。
确保两个文件都位于ACAD搜索支持路径中。
BLKLIB。拉链 为了给你一个关于如何进行块定义的想法,我将在分解状态下获取块,并获取块中每个项目的dxf数据。
以下是程序中三个块的定义。然而,它们有一个共同的属性。如果您的属性将具有不同的标记,那么代码的编写可能会有所不同。attcahed PDXF。下面的lsp用于从每个实体获取dxf数据。在AutoCAD Developer帮助部分中,有一节介绍DXF数据以及每种类型实体所需的数据类型。
PDXF。lsp将显示数据,您将复制该数据以用于块定义。我建议你提出关于这个主题的其他观点,这里有很多。在我看来,大卫·贝瑟尔是DXF之王。李在这方面也有很多很棒的帖子。
为了让我们双方都更容易理解,请尽量复习代码,然后再回到这个主题,回答您的问题。我会尽力回答。有很多信息需要涵盖。
(defun BLKLIB_BD ()
(entmake
(list
(cons 0 "block")
(cons 2 SYM)
(cons 10(list 0.0 0.0 0.0))
(cons 70 2)))
(cond
((= SYM "TRI")
(entmake
(list
(cons 0 "LWPOLYLINE")
(cons 100 "AcDbEntity")
(cons 8 "0")
(cons 100 "AcDbPolyline")
(cons 90 3)
(cons 70 1)
(cons 43 0.0)
(cons 10(list -0.00016575 0.288101))
(cons 10(list -0.249503 -0.143763))
(cons 10(list 0.249171 -0.143763)))))
((= SYM "SQR")
(entmake
(list
(cons 0 "LWPOLYLINE")
(cons 100 "AcDbEntity")
(cons 8 "0")
(cons 100 "AcDbPolyline")
(cons 90 4)
(cons 70 1)
(cons 43 0.0)
(cons 10(list -0.288267 0.287769))
(cons 10(list -0.287604 -0.288432))
(cons 10(list0.288598 -0.287769))
(cons 10(list0.287935 0.288432)))))
((= SYM "CIR")
(entmake
(list
(cons 0 "CIRCLE")
(cons 100 "AcDbEntity")
(cons 8 "0")
(cons 100 "AcDbCircle")
(cons 10(list0.00016575 9.53592e-008 0.0))
(cons 40 0.288101)))))
(entmake
(list
(cons 0 "ATTDEF")
(cons 100 "AcDbEntity")
(cons 8 ALAY)
(cons 100 "AcDbText")
(cons 10(list -0.158648 0.404835 0.0))
(cons 40 0.09375)
(cons 1 AVAL)
(cons 7 "Romans")
(cons 71 0)
(cons 72 1)
(cons 11(list -0.00016575 0.373585 0.0))
(cons 100 "AcDbAttributeDefinition")
(cons 3 "Text:")
(cons 2 "TEXT")
(cons 70
(cons 73 0)
(cons 74 1)))
(entmake
(list
(cons 0"endblk")
(cons 8 "0")))
(princ))
(princ)
PDXF。LSP 我会通过并尝试让我的模块与此一起工作,并在我完成一些测试后返回给您。
再次感谢您的帮助。
好的,但是因为你可能不熟悉entmake,让你理解这一切可能需要一些时间。如果你能给我提供一些积木,我可以帮你开始。还有另一种方法可以将块的路径放在程序中,避免将entmake解决方案放在一起,但这完全取决于您。此外,这可以在有或没有DCL的情况下完成,因为您可能不熟悉DCL编程。
让我知道你想做什么。 我正试图上传一到两个我的符号,但我相信我的办公室有某种防火墙,不允许我上传
页:
[1]
2