mitchellrodhous 发表于 2022-7-6 10:58:36

向cr中添加ATTDEF(阿替丁)

我们再次回到了一个需要解决的问题。
 
我正在使用LISP绘制三维实体对象。例如下面的代码。
 
现在这个Lisp程序让我可以画4个盒子。
我想知道是否有可能赋予这些盒子所有它们自己的属性。
 
 
例如:
 
“box”p1 p6 h具有以下属性:
 
名称:****由LISP中的代码给出,例如“TOP”
长度:******由我可以在setq下创建的两个点计算的总长度。。。。。
宽度:*由我可以在setq下创建的两个点计算的总宽度。。。。。。
厚度:*我将在setq m下给出的总厚度。
 
然后在创建框后,我可以单击实体对象,属性显示在“快捷特性”下。
 
不知道这是否可能?
 
尊敬的先生
 
 
 
(defun c:kast ()
;MR. CAD
;Autocad The Netherlands
;define the function
;*
;Save System Variables
(setq oldsnap (getvar "osmode"))

;save snap settings
(setq oldblipmode (getvar "blipmode"))
;save blipmode setting
(setvar "cmdecho" 1)
;*
;Switch OFF system Variables
(setvar "osmode" 0)
;Switch OFF snap
(setvar "blipmode" 0)
;Switch OFF Blipmode
;*

;get User Inputs
;get User Inputs
(setq b (getdist "\nWidth of the cabinet : "))
;Width of the cabinet

(setq h (getdist "\nHight of the cabinet : "))
;Hight of the cabinet
(setq d (getdist "\nDepth of the cabinet : "))
;Depth of the cabinet
(setq m (getdist "\nMaterialthickness of the cabinet : "))
;Materialthicknes of the cabinet
;*
;Get Insertion Point
(setq ip (getpoint "\nInsertion Point : "))
;get the insertion point
(setvar "osmode" 32)
;switch ON snap
(setvar "osmode" 0)
;switch OFF snap
;*

;Start of Polar Calculations
;This are calculation made by MR Cad
(setq p1 (polar ip (dtr 0.0) 0.0))
(setq p2 (polar p1 (dtr 0.0) m))
(setq p3 (polar p1 (dtr 0.0) b))
(setq p4 (polar p3 (dtr 180.0) m))
(setq p5 (polar p1 (dtr -90.0) d))
(setq p6 (polar p5 (dtr 0.0) m))
(setq p7 (polar p5 (dtr 0.0) b))
(setq p8 (polar p7 (dtr 180.0) m))
(setq p9 (list (car p1) (cadr p1) (+ (caddr p1) m)))
(setq p10 (list (car p4) (cadr p4)(+ (caddr p4) m)))
(setq p11 (polar p9 (dtr -90.0) d))
(setq p12 (polar p10 (dtr -90.0) d))
(setq p13 (list (car p2) (cadr p2) (+ (caddr p2) h)))
(setq p14 (list (car p4) (cadr p4)(+ (caddr p4) h)))
(setq p15 (polar p13 (dtr -90.0) d))
(setq p16 (polar p14 (dtr -90.0) d))
(setq p17 (list (car p13) (cadr p13) (- (caddr p13) m)))
(setq p18 (list (car p14) (cadr p14) (- (caddr p14) m)))
(setq p19 (list (car p15) (cadr p15) (- (caddr p15) m)))
(setq p20 (list (car p16) (cadr p16) (- (caddr p16) m)))

;End of the Polar calculations by MR. CAD
;*
;Start Command Function
(command "_-view" "_swiso"
) ;End command
(command "ucs" "w"
) ;End command
(command "box" p1 p6 h
   "box" p4 p7 h
   "box" p2 p8 m
   "box" p13 p16 (- (+ m))
) ;End Command
(command "zoom" "a"
) ;End Command

;End of Commands made by MR. CAD
(setvar "osmode" 32)
;switch ON snap

;*
;Reset System Variable
(setvar "osmode" oldsnap)
;Reset snap
(setvar "blipmode" oldblipmode)
;Reset blipmode

;*
(princ)
;finish cleanly

) ;end of defun
;*
;This function converts Degrees to Radians.
(defun dtr (x)
;define degrees to radians function
(* pi (/ x 180.0))
;divide the angle by 180 then
;multiply the result by the constant PI
) ;End of function
;*
(princ) ;load cleanly
;*
;;HOPE THIS LISP WILL BE FUNCTIONAL FOR THE USER
;;MADE BY MR. CAD
;;END LISP

JohnM 发表于 2022-7-6 11:05:02

不,查看扩展数据和xrecord

mitchellrodhous 发表于 2022-7-6 11:16:33

好的,我自己做了一些改进。我还有一个问题。。再一次
 
(command "box" p1 p6 h
   "attdef" "" "Name" "Top" "" p1 "" ""
   "attdef" "" "Hight" h "" p1 "" ""
   "attdef" "" "Width" d "" p1 "" ""
   "attdef" "" "Thickness" m "" p1 "" ""
 
该命令将创建一个框,在p1的位置上具有给定的属性。
据我所知,我现在必须插入的唯一命令是创建一个块对象。。。所以
是否有命令或选项来自动创建这些值的块?
如果我能用attdef创建一个方块,我就接近我的目标了。。。
 
尊敬的先生

David Bethel 发表于 2022-7-6 11:17:35

制作块和插入是一件乏味的事情。
 
由于您处理的是三维实体,因此无法动态生成实体。您必须使用(entget)调用
 
您必须添加ATTDEF和ATTRIB的平衡,但这只是一个开始。
 
 

(command "box" p1 p6 h)
;(setq p1 '(10 10 0))
;(command "_SOLID" '(10 10 0) '(20 10 0) '(10 20 0) '(20 20 0) "")
(setq fe (entlast))

(setq bc 1 bn "TEMP1")
(while (tblsearch "BLOCK" bn)
      (setq bc (1+ bc) bn (strcat "TEMP" (itoa bc))))

(entmake (list (cons 0 "BLOCK")(list 10 0 0 0)(cons 2 bn)(cons 70 2)))
(entmake (entget fe))
(entmake (list (cons 0 "ATTDEF")
                (cons 8 "0")
                (cons 10 '(0 0 0))
                (cons 11 '(0 0 0))
                (cons 40 1)
                (cons 1 (strcat "(" (rtos (car p1) 2" "
                                    (rtos (cadr p1) 2" "
                                    (rtos (caddr p1) 2")"))
                (cons 3 "TOP")
                (cons 2 "NAME")
                (cons 70 0)
                (cons 73 0)
                (cons 50 0)
                (cons 41 1)
                (cons 51 0)
                (cons 7 "STANDARD")
                (cons 71 0)
                (cons 72 0)
                (cons 210 (list 0 0 1))
                (cons 74 0)
                (cons 62 256)
                (cons 39 0)
                (cons 6 "BYLAYER")))
(entmake (list (cons 0 "ENDBLK")(cons 8 "0")))

(entdel fe)

(entmake (list (cons 0 "INSERT")(cons 2 bn)(cons 10 '(0 0 0))(cons 66 1)
                (cons 62 256)
                (cons 39 0)
                (cons 6 "BYLAYER")))
(entmake (list (cons 0 "ATTRIB")
                (cons 8 "0")
                (cons 10 '(0 0 0))
                (cons 11 '(0 0 0))
                (cons 40 1)
                (cons 1 (strcat "(" (rtos (car p1) 2" "
                                    (rtos (cadr p1) 2" "
                                    (rtos (caddr p1) 2")"))
                (cons 2 "NAME")
                (cons 70 0)
                (cons 73 0)
                (cons 50 0)
                (cons 41 1)
                (cons 51 0)
                (cons 7 "STANDARD")
                (cons 71 0)
                (cons 72 0)
                (cons 210 (list 0 0 1))
                (cons 73 0)
                (cons 62 256)
                (cons 39 0)
                (cons 6 "BYLAYER")))
(entmake (list (cons 0 "SEQEND")(cons 8 "0")))



 
-大卫

mitchellrodhous 发表于 2022-7-6 11:24:41

大家好!
 
我注意到他们对我的问题没有太多的回应。
所以我附上一个附件。也许有人会理解的权利知道。。。
 
你可以在我的图片上看到,我用lisp设置了一些引用,我也将附加为文件和下面的内容。
 
现在它显示为value(1756-1626 0),我注意到我可以按名称包含一个单词,但我不能删除数字。。。
任何回应都很好
 
尊敬的先生
 
(defun c:kast ()
;MR. CAD - Mitchell Rodhouse
;Autocad The Netherlands
;define the function
;*
;Save System Variables
(setq oldsnap (getvar "osmode"))

;save snap settings
(setq oldblipmode (getvar "blipmode"))
;save blipmode setting
(setvar "cmdecho" 0)
(setvar "INSUNITS" 4)
;*
;Switch OFF system Variables
(setvar "osmode" 0)
;Switch OFF snap
(setvar "blipmode" 0)
;Switch OFF Blipmode
;*

;get User Inputs
;get User Inputs
(setq b (getdist "\nWidth of the cabinet : "))
;Width of the cabinet

(setq h (getdist "\nHight of the cabinet : "))
;Hight of the cabinet
(setq d (getdist "\nDepth of the cabinet : "))
;Depth of the cabinet
(setq m (getdist "\nMaterialthickness of the cabinet : "))
;Materialthicknes of the cabinet
;*
;Get Insertion Point
(setq ip (getpoint "\nInsertion Point : "))
;get the insertion point
(setvar "osmode" 32)
;switch ON snap
(setvar "osmode" 0)
;switch OFF snap
;*

;Start of Polar Calculations
;This are calculation made by MR Cad
(setq p1 (polar ip (dtr 0.0) 0.0))
(setq p2 (polar p1 (dtr 0.0) m))
(setq p3 (polar p1 (dtr 0.0) b))
(setq p4 (polar p3 (dtr 180.0) m))
(setq p5 (polar p1 (dtr -90.0) d))
(setq p6 (polar p5 (dtr 0.0) m))
(setq p7 (polar p5 (dtr 0.0) b))
(setq p8 (polar p7 (dtr 180.0) m))
(setq p9 (list (car p1) (cadr p1) (+ (caddr p1) m)))
(setq p10 (list (car p4) (cadr p4)(+ (caddr p4) m)))
(setq p11 (polar p9 (dtr -90.0) d))
(setq p12 (polar p10 (dtr -90.0) d))
(setq p13 (list (car p2) (cadr p2) (+ (caddr p2) h)))
(setq p14 (list (car p4) (cadr p4)(+ (caddr p4) h)))
(setq p15 (polar p13 (dtr -90.0) d))
(setq p16 (polar p14 (dtr -90.0) d))
(setq p17 (list (car p13) (cadr p13) (- (caddr p13) m)))
(setq p18 (list (car p14) (cadr p14) (- (caddr p14) m)))
(setq p19 (list (car p15) (cadr p15) (- (caddr p15) m)))
(setq p20 (list (car p16) (cadr p16) (- (caddr p16) m)))

;End of the Polar calculations by MR. CAD
;*
;Start Command Function
(command "_-view" "_swiso"
) ;End command
(command "ucs" "w"
) ;End command

(command "box" p1 p6 h)
;(setq p1 '(10 10 0))
;(command "_SOLID" '(10 10 0) '(20 10 0) '(10 20 0) '(20 20 0) "")
(setq fe (entlast))
(setq bc 1 bn "Leftside1")
(while (tblsearch "BLOCK" bn)
      (setq bc (1+ bc) bn (strcat "Leftside" (itoa bc))))
(entmake (list (cons 0 "BLOCK")(list 10 0 0 0)(cons 2 bn)(cons 70 2)))
(entmake (entget fe))
;*********************************************************************************
(entmake (list (cons 0 "ATTDEF")
                (cons 8 "0")
                (cons 10 '(0 0 0))
                (cons 11 '(0 0 0))
                (cons 40 1)
                (cons 1 (strcat "(" (rtos (car p1) 2 0) "Leftside"
                                    (rtos (cadr p1) 2 0) " "
                                    (rtos (caddr p1) 2 0) ")"))
                (cons 3 "Leftside")
                (cons 2 "Name:")
                (cons 70 0)
                (cons 73 0)
                (cons 50 0)
                (cons 41 1)
                (cons 51 0)
                (cons 7 "STANDARD")
                (cons 71 0)
                (cons 72 0)
                (cons 210 (list 0 0 1))
                (cons 74 0)
                (cons 62 256)
                (cons 39 0)
                (cons 6 "BYLAYER")))
;*********************************************************************************
   (entmake (list (cons 0 "ATTDEF")
                (cons 8 "0")
                (cons 10 '(0 0 0))
                (cons 11 '(0 0 0))
                (cons 40 1)
                (cons 1 (strcat "(" (rtos (car p1) 2 0) " "
                                    (rtos (cadr p1) 2 0) " "
                                    (rtos (caddr p1) 2 0) ")"))
                (cons 3 "Hight1")
                (cons 2 "Hight")
                (cons 70 0)
                (cons 73 0)
                (cons 50 0)
                (cons 41 1)
                (cons 51 0)
                (cons 7 "STANDARD")
                (cons 71 0)
                (cons 72 0)
                (cons 210 (list 0 0 1))
                (cons 74 0)
                (cons 62 256)
                (cons 39 0)
                (cons 6 "BYLAYER")))
;*********************************************************************************
(entmake (list (cons 0 "ATTDEF")
                (cons 8 "0")
                (cons 10 '(0 0 0))
                (cons 11 '(0 0 0))
                (cons 40 1)
                (cons 1 (strcat "(" (rtos (car p1) 2 0) " "
                                    (rtos (cadr p1) 2 0) " "
                                    (rtos (caddr p1) 2 0) ")"))
                (cons 3 "Widht1")
                (cons 2 "Widht")
                (cons 70 0)
                (cons 73 0)
                (cons 50 0)
                (cons 41 1)
                (cons 51 0)
                (cons 7 "STANDARD")
                (cons 71 0)
                (cons 72 0)
                (cons 210 (list 0 0 1))
                (cons 74 0)
                (cons 62 256)
                (cons 39 0)
                (cons 6 "BYLAYER")))
;*********************************************************************************
(entmake (list (cons 0 "ATTDEF")
                (cons 8 "0")
                (cons 10 '(0 0 0))
                (cons 11 '(0 0 0))
                (cons 40 1)
                (cons 1 (strcat "(" (rtos (car p1) 2 0) " "
                                    (rtos (cadr p1) 2 0) " "
                                    (rtos (caddr p1) 2 0) ")"))
                (cons 3 "Thickness1")
                (cons 2 "Thickness")
                (cons 70 0)
                (cons 73 0)
                (cons 50 0)
                (cons 41 1)
                (cons 51 0)
                (cons 7 "STANDARD")
                (cons 71 0)
                (cons 72 0)
                (cons 210 (list 0 0 1))
                (cons 74 0)
                (cons 62 256)
                (cons 39 0)
                (cons 6 "BYLAYER")))
;*********************************************************************************
(entmake (list (cons 0 "ENDBLK")(cons 8 "0")))
(entdel fe)
(entmake (list (cons 0 "INSERT")(cons 2 bn)(cons 10 '(0 0 0))(cons 66 1)
                (cons 62 256)
                (cons 39 0)
                (cons 6 "BYLAYER")))
;*********************************************************************************
(entmake (list (cons 0 "ATTRIB")
                (cons 8 "0")
                (cons 10 '(0 0 0))
                (cons 11 '(0 0 0))
                (cons 40 1)
                (cons 1 (strcat "(" (rtos (car p1) 2 0) "Leftside"
                                    (rtos (cadr p1) 2 0) " "
                                    (rtos (caddr p1) 2 0) ")"))
                (cons 2 "Name:")
                (cons 70 0)
                (cons 73 0)
                (cons 50 0)
                (cons 41 1)
                (cons 51 0)
                (cons 7 "STANDARD")
                (cons 71 0)
                (cons 72 0)
                (cons 210 (list 0 0 1))
                (cons 73 0)
                (cons 62 256)
                (cons 39 0)
                (cons 6 "BYLAYER")))
;*********************************************************************************
(entmake (list (cons 0 "ATTRIB")
                (cons 8 "0")
                (cons 10 '(0 0 0))
                (cons 11 '(0 0 0))
                (cons 40 1)
                (cons 1 (strcat "(" (rtos (car p1) 2 0) " "
                                    (rtos (cadr p1) 2 0) " "
                                    (rtos (caddr p1) 2 0) ")"))
                (cons 2 "Hight")
                (cons 70 0)
                (cons 73 0)
                (cons 50 0)
                (cons 41 1)
                (cons 51 0)
                (cons 7 "STANDARD")
                (cons 71 0)
                (cons 72 0)
                (cons 210 (list 0 0 1))
                (cons 73 0)
                (cons 62 256)
                (cons 39 0)
                (cons 6 "BYLAYER")))
;*********************************************************************************
(entmake (list (cons 0 "ATTRIB")
                (cons 8 "0")
                (cons 10 '(0 0 0))
                (cons 11 '(0 0 0))
                (cons 40 1)
                (cons 1 (strcat "(" (rtos (car p1) 2 0) " "
                                    (rtos (cadr p1) 2 0) " "
                                    (rtos (caddr p1) 2 0) ")"))
                (cons 2 "Widht")
                (cons 70 0)
                (cons 73 0)
                (cons 50 0)
                (cons 41 1)
                (cons 51 0)
                (cons 7 "STANDARD")
                (cons 71 0)
                (cons 72 0)
                (cons 210 (list 0 0 1))
                (cons 73 0)
                (cons 62 256)
                (cons 39 0)
                (cons 6 "BYLAYER")))
;*********************************************************************************
(entmake (list (cons 0 "ATTRIB")
                (cons 8 "0")
                (cons 10 '(0 0 0))
                (cons 11 '(0 0 0))
                (cons 40 1)
                (cons 1 (strcat "(" (rtos (car p1) 2 0) " "
                                    (rtos (cadr p1) 2 0) " "
                                    (rtos (caddr p1) 2 0) ")"))
                (cons 2 "Thickness")
                (cons 70 0)
                (cons 73 0)
                (cons 50 0)
                (cons 41 1)
                (cons 51 0)
                (cons 7 "STANDARD")
                (cons 71 0)
                (cons 72 0)
                (cons 210 (list 0 0 1))
                (cons 73 0)
                (cons 62 256)
                (cons 39 0)
                (cons 6 "BYLAYER")))
;*********************************************************************************


(entmake (list (cons 0 "SEQEND")(cons 8 "0"))

) ;End Command

(command "zoom" "a"
) ;End Command

;End of Commands made by MR. CAD
(setvar "osmode" 32)
;switch ON snap

;*
;Reset System Variable
(setvar "osmode" oldsnap)
;Reset snap
(setvar "blipmode" oldblipmode)
;Reset blipmode

;*
(princ)
;finish cleanly

) ;end of defun
;*
;This function converts Degrees to Radians.
(defun dtr (x)
;define degrees to radians function
(* pi (/ x 180.0))
;divide the angle by 180 then
;multiply the result by the constant PI
) ;End of function
;*
(princ) ;load cleanly
;*
;;HOPE THIS LISP WILL BE FUNCTIONAL FOR THE USER
;;MADE BY MR. CAD
;;END LISP

kast2.LSP

David Bethel 发表于 2022-7-6 11:28:57

您需要将组1的值更改为您的值
 
对于高度:
 
(cons 1(rtos h 2))

(cons 1(strcat“高度=(rtos h 2)))
 
您需要查看DIMZIN和LUPREC设置来控制前导零和尾随零。
 
-大卫

mitchellrodhous 发表于 2022-7-6 11:40:06

你是个天才!
现在我已经为一个盒子做了。。我还得试着让它为其他盒子工作,你知道我该如何设置它吗?因为如果我在另一个框下添加一个box命令,它将保持稳定的逻辑。。。但是,如果我(普林斯)在SE代码下无法再次启动此al,对吗?
 
尊敬的先生

mitchellrodhous 发表于 2022-7-6 11:42:25

(cons 1(rtos b 2))我也可以给出“b”的这个值,但不超过-2xm吗?我的材料厚度是m,所以长度是b-m-m,可以吗?
 
我做了:(cons 1(rtos d(-m m))2))
但这不起作用xD
尊敬的先生

David Bethel 发表于 2022-7-6 11:51:51

 

(rtos (- b m m) 2)
or
(rtos (- b (* m 2)) 2)

David Bethel 发表于 2022-7-6 11:55:37

 
 
您必须在制作时保存每个盒子的名称

(command "box" .....)
(setq fe (entlast));;;first entity

(command "box" .....)
(setq se (entlast));;;second entity

(command "box" .....)
(setq te (entlast));;;third entity

 
然后在块表定义中创建实体定义
(entmake (entget fe))
(entmake (entget se))
(entmake (entget te))
然后删除原始实体
 
(entdel fe)
(entdel se)
(entdel te)
-大卫
页: [1] 2
查看完整版本: 向cr中添加ATTDEF(阿替丁)