sanvan5 发表于 2022-7-5 16:42:53

矩形尺寸、文字和尺寸

尊敬的Autodesk小组成员,特别是所有程序员,我需要您在这一主题上的帮助(如果有人能在这方面帮助我,那将非常棒)
我希望为我的AUTOCAD 2017项目需要创建一个LISP。
 
我想用自定义命令在特定层中创建一个矩形,然后我想在运行时给该矩形加上L&W,这样在完成/在命令中间,我将得到所需大小的矩形,然后在创建矩形后,我想得到一条弹出消息,autocad将要求我提供默认情况下要放置在所创建矩形中心的矩形的名称。
 
我想为要创建的不同矩形执行此操作。
 
我创建了自定义命令来创建特定的当前矩形层,然后使用下面的代码创建了矩形。我已经10年没有接触过LISP写作了&忘记了大部分事情,我以前的代码在新版本中无法使用。有人能帮我吗。这将是一个很大的帮助,从你,提前感谢你的支持同样。我急需它。
 
(defun_SetCLayer(layerName)
(如果(tblsearch“layer”layerName)
(setvar’clayer layerName)
(提示
(strcat“\n**层\”“层名称\”“未找到**”)
)
)
(普林斯)
)
(defun c:ACDB()(\u SetCLayer“AC\u DB”)(命令“RECTANG”“)-在此情况下,autocad也给出了一些违规行为。
(defun c:ACON()(\u SetCLayer“AIR\u CON”)(命令“RECTANG”))
(defun c:FBAT()(_SetCLayer“BATTERY”)(命令“RECTANG”))
(defun c:FBEN()(\u SetCLayer“BUILDING\u ENVELOPE”)(命令“RECTANG”))
(defun c:FCAB()(_SetCLayer“CABINET”)(命令“RECTANG”))
(defun c:DCDB()(\u SetCLayer“DC\u DB”)(命令“RECTANG”))
(defun c:FDEF()(_SetCLayer“Defpoints”)(命令“RECTANG”))
(defun c:FPDI()(_SetCLayer“DIMENSIONS”)(命令“RECTANG”))
(defun c:FPDR()(_SetCLayer“DOORS”)(命令“RECTANG”))
(defun C:FFED()(_SetCLayer“FEEDER”)(命令“RECTANG”))
(defun c:FPLD()(\u SetCLayer“FLOOR\u LEGEND”)(命令“RECTANG”))
(defun c:IMGI()(_SetCLayer“Image”)(命令“RECTANG”))
(defun c:FOTR()(_SetCLayer“OTHER”)(命令“RECTANG”))
(defun c:FRAK()(_SetCLayer“RACK”)(命令“RECTANG”))
(defun c:FREF()(_SetCLayer“整流器”)(命令“RECTANG”))
(defun c:FTEX()(_SetCLayer“TEXT”)(命令“RECTANG”))
)
 
过去,我使用下面的命令来给出文本,但现在不起作用
(定义C:ACDBT()
(setq bldg_编号(strcase(getstring)/n键入ACDB编号:“))
(setq建筑编号(strcat“ACDB”建筑编号))
(polbldgno)
(命令“clayer”“AC\u DB”“”“text“fspt txtht angpts bldgno”)
)
 
最后,我的要求是我必须创建平面图:
1.当前特定层中的矩形,我应该在其中弹出以给出L和W。
2.该矩形中心的文本“在连接特定文本后,弹出窗口仅输入数字”
3.在创建所有矩形后,我想通过选择它们来为所有矩形提供尺寸。

SLW210 发表于 2022-7-5 16:56:59

请阅读代码发布指南,并编辑代码以包含在代码标签中。
Your Code Here=
Your Code Here

sanvan5 发表于 2022-7-5 17:13:45

尊敬的Autodesk小组成员,特别是所有程序员,我需要您在这一主题上的帮助(如果有人能在这方面帮助我,那将非常棒)
我希望为我的AUTOCAD 2017项目需要创建一个LISP。
 
我想用自定义命令在特定层中创建一个矩形,然后我想在运行时给该矩形加上L&W,这样在完成/在命令中间,我将得到所需大小的矩形,然后在创建矩形后,我想得到一条弹出消息,autocad将要求我提供默认情况下要放置在所创建矩形中心的矩形的名称。
 
我想为要创建的不同矩形执行此操作。
 
我创建了自定义命令来创建特定的当前矩形层,然后使用下面的代码创建了矩形。我已经10年没有接触过LISP写作了&忘记了大部分事情,我以前的代码在新版本中无法使用。有人能帮我吗。这将是一个很大的帮助,从你,提前感谢你的支持同样。我急需它。

(defun _SetCLayer (layerName)
(if (tblsearch "layer" layerName)
(setvar 'clayer layerName)
(prompt
(strcat "\n** Layer \"" layerName "\" not found ** ")
)
)
(princ)
)
(defun c:ACDB () (_SetCLayer "AC_DB") (command "RECTANG" "")) - in this autocad is also giving some violations.
(defun c:ACON () (_SetCLayer "AIR_CON") (command "RECTANG"))
(defun c:FBAT () (_SetCLayer "BATTERY") (command "RECTANG"))
(defun c:FBEN () (_SetCLayer "BUILDING_ENVELOPE") (command "RECTANG"))
(defun c:FCAB () (_SetCLayer "CABINET") (command "RECTANG"))
(defun cCDB () (_SetCLayer "DC_DB") (command "RECTANG"))
(defun c:FDEF () (_SetCLayer "Defpoints") (command "RECTANG"))
(defun c:FPDI () (_SetCLayer "DIMENSIONS") (command "RECTANG"))
(defun c:FPDR () (_SetCLayer "DOORS") (command "RECTANG"))
(defun C:FFED () (_SetCLayer "FEEDER") (command "RECTANG"))
(defun c:FPLD () (_SetCLayer "FLOOR_LEGEND") (command "RECTANG"))
(defun c:IMGI () (_SetCLayer "Image") (command "RECTANG"))
(defun c:FOTR () (_SetCLayer "OTHER") (command "RECTANG"))
(defun c:FRAK () (_SetCLayer "RACK") (command "RECTANG"))
(defun c:FREF () (_SetCLayer "RECTIFIER") (command "RECTANG"))
(defun c:FTEX () (_SetCLayer "TEXT") (command "RECTANG"))
)

In past i used below command to give text, which is now not working
(defun C:ACDBT ()
(setq bldg_no (strcase (getstring "/n Type the ACDB NO: ")))
(setq bldgno (strcat "ACDB" bldg_no))
(polbldgno)
(command "clayer" "AC_DB" "" "text" fspt txtht angpts bldgno "")
)

最后,我的要求是我必须创建平面图:
1.当前特定层中的矩形,我应该在其中弹出以给出L和W。
2.该矩形中心的文本“在连接特定文本后,弹出窗口仅输入数字”
3.在创建所有矩形后,我希望通过选择它们一次性为所有矩形提供尺寸。

BIGAL 发表于 2022-7-5 17:20:05

写一个defun来绘制矩形,而不是命令“rectang”(Drawrectang),这应该要求左下角点的长度和宽度。这是一个开始暗淡,因为你去更容易选择所有之后。就我而言,我会使用菜单或工具栏,而不是所有的c:defuns。用菜单可以分菜单等。
 

(defun drawrectang ( / pt pt2 len wid )
(setq pt (getpoint "please pick lower left"))
(setq len (getdist pt "Please enter length"))
(setq wid (getdist pt "Please enter width"))
(command "rectang" pt "D" len wid "")
(setq pt2 (polar pt 0.0 len)) ; 4 corner points
(setq pt3 (polar pt2 (/ pi 2.0) wid))
(setq pt4 (polar pt (/ pi 2.0) wid))
(setq ang (angle pt pt2))
(setq len (distance pt pt2))
(setq pt (polar ang (/ len 2.0)))
(command "text" pt "" "" (rtos len 2 2))
)
; do dims based on pt pt2 pt3 pt4

 
这可以用于长度和宽度输入,只需查看代码中2项的示例。
GETVALS。lsp

BIGAL 发表于 2022-7-5 17:37:34

这将做一个矩形添加尺寸和标签
 

; draw a rectang and remember the corners v's just draw a rectang
; by Alan H Feb 2017

; this defun would live in my library
(defun rectangcnrs ( / len wid )
(setq pt1 (getpoint "please pick lower left"))
(setq len (getdist pt1 "Please enter length"))
(setq pt2 (polar pt1 0.0 len)) ; 4 corner points
(setq wid (getdist pt2 "Please enter width"))
(setq pt3 (polar pt2 pi2 wid))
(setq pt4 (polar pt3 pi len))
(command "rectang" pt1 pt3)
)

; program starts here
(defun c:rectdimtx ( / off oldang oldsnappt1 pt2 pt3 pt4 pt5)
(setq pi2 (/ pi 2.0)) ; global setting in my library lisp needed

(setq off 20) ; change this as required or ask for offset code

; remember old settings
(setq oldang (getvar 'angdir))
(setq oldsnap (getvar 'osmode))
(setq angunits (getvar 'aunits))
; make angles counterclockwise so angles work
; turn off osnaps just helps
(setvar 'angdir 0)
(setvar 'osmode 0)
(setvar 'aunits 3)

(rectangcnrs)

(command "_.dimaligned" pt2 pt3 (polar pt2 0.0 off))
(command "_.dimaligned" pt3 pt4 (polar pt4 pi2 off))
(setq ang (angle pt3 pt1))
(setq pt5 (polar pt1 ang (/ (distance pt1 pt3) 2.0)))
(command "text" pt5 "" ang (getstring "Enter text")) ; put this getstring in getvals using 3 lines len wid desc

(setvar 'angdir oldang)
(setvar 'osmode oldsnap)
(setvar 'aunits angunits)

) ;defun

BIGAL 发表于 2022-7-5 17:44:00

此版本使用dcl作为输入。
 

; draw a rectang and remember the corners v's just draw a rectang
; by Alan H Feb 2017

; this defun would live in my library
(defun rectangcnrs ( / len wid )
(if (not AH:getval1)(Load "getvals")) ; loads getval 1-3
(setq pt1 (getpoint "please pick lower left"))
(ah:getval2 "Enter length" 5 4 "Enter height" 5 4)
(setq len (atof val1))
(setq wid (atof val2))
(setq pt2 (polar pt1 0.0 len)) ; 4 corner points
(setq pt3 (polar pt2 pi2 wid))
(setq pt4 (polar pt3 pi len))
(command "rectang" pt1 pt3)
)

; program starts here
(defun c:rectdimtx ( / off oldang oldsnappt1 pt2 pt3 pt4 pt5)
(setq pi2 (/ pi 2.0)) ; global setting in my library lisp needed

(setq off 20) ; change this as required or ask for offset code

; remember old settings
(setq oldang (getvar 'angdir))
(setq oldsnap (getvar 'osmode))
(setq angunits (getvar 'aunits))
; make angles counterclockwise so angles work
; turn off osnaps just helps
(setvar 'angdir 0)
(setvar 'osmode 0)
(setvar 'aunits 3)

(rectangcnrs)

(command "_.dimaligned" pt2 pt3 (polar pt2 0.0 off))
(command "_.dimaligned" pt3 pt4 (polar pt4 pi2 off))
(setq ang (angle pt1 pt3))
(setq pt5 (polar pt1 ang (/ (distance pt1 pt3) 2.0)))
(ah:getval1 "Enter string" 5 4)
(command "text" pt5 "" ang val1) ; put this getstring in getvals using 3 lines len wid desc

(setvar 'angdir oldang)
(setvar 'osmode oldsnap)
(setvar 'aunits angunits)

) ;defun
页: [1]
查看完整版本: 矩形尺寸、文字和尺寸