CHLUCFENG 发表于 2022-7-6 11:03:48

具有3个属性的块

我有一个包含三个属性的块,分别表示窗口的宽度、长度和平方英尺。我编写了一个简单的代码,将块插入到图形中,并根据用户需要重复。问题是,-Insert命令产生了一个错误,产生了一个“无效的选项关键字”错误消息。
 

(defun c:ATO-Windows ()   
(c:utility-start)
(setvar "osmode" 0)
(SETVAR "TEXTEVAL" 1)
(setq ATOLayer      "AreaTakeOff-Window"
ATOLayerColor "143"
ATOLineType   "Continuous"
ATOBlkWPath   "C:/ACAD2008/HVAC/BLOCKS/ATTR-WINDOW"
)
(command "layer"   "on"    ATOLayer    "thaw"    ATOLayer
   "m"      ATOLayer    "C"      ATOLayerColor
   ATOLayer    "Ltype"    ATOLineType ""
)
(setq continue "T")
(while continue
   (setq WindowLength "0"
WindowWidth "0"
   )
   (setq WindowLength (getstring "\nEnter Window Length in feet: "))
   (setq WindowWidth (getstring "\tWidth in feet: "))
   (setq RealLength (atof WindowLength)
RealWidth(atof WindowWidth)
   )
   (setq RealArea (* RealLength RealWidth))
   (setq WindowArea (strcat (rtos RealArea 2 2) "SF"))
   (SETVAR "ATTDIA" 0)
   (terpri)
   (if (> RealArea 0.0)
(command "-insert" ATOBlkWPath "Scale" (getvar "Userr3") Pause "0"
WindowLengthWindowWidthWindowArea
)
       (setq continue nil)
   )   ;end if
)   ;end while
(c:utility-end)
(SETVAR "ATTDIA" 1)
)   ;end c:ATO-Windows


 
块连接,设置测试此代码的路径。我不明白为什么我会出错。也许一双新的眼睛会发现一些东西。
 
谢谢

属性窗口。图纸

David Bethel 发表于 2022-7-6 11:22:08

有很多问题,但最大的问题是设置了ATTDEFs验证位。
 
我试着把它清理一下:
 

(defun c:ATO-Windows (/ ATOLayer ATOLayerColor ATOLineType
                     ATOBlkWPath WindowLength WindowWidth
                     RealArea WindowArea ipt)
;(c:utility-start)
;(setvar "osmode" 0)

(setvar "CMDECHO" 0)

(if (= (getvar "USERR3") 0)
   (setvar "USERR3" 4.8))

(setq ATOLayer   "AreaTakeOff-Window"
ATOLayerColor   "143"
    ATOLineType   "Continuous"
    ATOBlkWPath   "C:/ACAD/AWINDOW" ;2008/HVAC/BLOCKS/ATTR-WINDOW
    )

(if (not (tblsearch "LAYER" ATOLayer))
   (command "_.LAYER""_M"ATOLayer ""))

(command "_.LAYER" "_ON" ATOLayer
                  "_T"ATOLayer
                  "_S"ATOLayer
                  "_C"ATOLayerColor ATOLayer
                  "_LT" ATOLineType   ATOLayer "")
(while (progn
          (initget 6)
          (setq WindowLength (getdist "\nEnter Window Length in feet: ")))
      (initget 7)
      (setq WindowWidth (getdist "\tWidth in feet: "))
      (setq RealArea (* WindowLength WindowWidth))
      (setq WindowArea (strcat (rtos RealArea 2 2) "SF"))
      (initget 1)
      (setq ipt (getpoint "\nInsert Point:   "))
      (command "_.INSERT" ATOBlkWPath ipt (getvar "Userr3") "" ""
               (rtos WindowLength 2 2)
               (rtos WindowWidth2 2)
               WindowArea))

;(c:utility-end)

(prin1))

 
-大卫
A窗口。图纸

asos2000 发表于 2022-7-6 11:46:31

我认为ENTMAKE比调用command更好
 
附属的
-创建lisp的块可以用作子例程
-我用来创建的lisp。
属性窗口。lsp
EntMaker CAB 03-MakeEntmake。lsp

CHLUCFENG 发表于 2022-7-6 11:58:42

感谢David处理代码。它按照我的计划工作。我比较我的代码来理解我的错误。我尝试在代码中使用下划线插入和下划线-点插入,但仍然不断出错。下划线使命令透明正确吗?下划线点做什么?
 
感谢asos2000提供您的ENTMAKE版本。虽然我已经通读了代码,但我并没有完全理解它。对我来说是相当先进的东西。我将使用此代码作为学习工具来理解ENTMAKE OMAND。
 
扔出

David Bethel 发表于 2022-7-6 12:13:51

问题在于ATTDEFs。设置验证位后,需要将属性值两次提供给命令调用
 
_.表示使用国际名称并忽略未定义的命令。(破折号)通常表示绕过对话框输入屏幕-大卫
页: [1]
查看完整版本: 具有3个属性的块