Gratitude1977 发表于 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)
(普林斯)
 
谢谢你的帮助。

The Buzzard 发表于 2022-7-6 09:53:01

只需为旋转角度添加另一个暂停。
 

(command "._-insert" "plumbingstack1-30" pt pause pause))

The Buzzard 发表于 2022-7-6 09:56:58

顺便说一句,如果你不介意的话,请编辑你的帖子,把代码放在代码括号里。
请参见此处: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))

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

The Buzzard 发表于 2022-7-6 09:59:16

我组装了这个让你试试。根据需要进行调整。
 

(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解决方案

Gratitude1977 发表于 2022-7-6 10:04:44

非常感谢你的帮助!我也会尝试这个新的程序。
 
我的另一个快速问题是创建一个具有可编辑文本的块。这可能吗?如果可能,我将如何创建它?
 
再次感谢!

The Buzzard 发表于 2022-7-6 10:06:24

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

The Buzzard 发表于 2022-7-6 10:11:32

为了给你一个关于如何进行块定义的想法,我将在分解状态下获取块,并获取块中每个项目的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

Gratitude1977 发表于 2022-7-6 10:11:47

我会通过并尝试让我的模块与此一起工作,并在我完成一些测试后返回给您。
 
再次感谢您的帮助。

The Buzzard 发表于 2022-7-6 10:15:36

 
好的,但是因为你可能不熟悉entmake,让你理解这一切可能需要一些时间。如果你能给我提供一些积木,我可以帮你开始。还有另一种方法可以将块的路径放在程序中,避免将entmake解决方案放在一起,但这完全取决于您。此外,这可以在有或没有DCL的情况下完成,因为您可能不熟悉DCL编程。
 
让我知道你想做什么。

Gratitude1977 发表于 2022-7-6 10:18:35

我正试图上传一到两个我的符号,但我相信我的办公室有某种防火墙,不允许我上传
页: [1] 2
查看完整版本: 将旋转功能添加到