检索文本或随机属性
你好基本上,我已经厌倦了我们使用的旧Lisp程序。
我对它进行了编辑,这样它可以处理任何单个或多个文本。
但我希望能够选择块中的数字,或属性中随机出现的数字,因为我只知道如果你知道属性名称,这是可能的,而我只想选择一个。
所以你们这些聪明人的任何帮助都会很棒
干杯花
; tot allows user to select numbers on a drawing and it will add them all up and give you a total.
; The numbers must be in text format (not attributes or blocked) and can be selected with a window
; This is useful for summing up masses of components listed in a parts list.
;
; by FPrSept-1996
;edited by flower 15 jan
;;;*===========================================================
(defun initerr ()
(graphscr)
(setq oldlayer (getvar "clayer"))
(setq oldsnap (getvar "osmode"))
(setq oldpick (getvar "pickbox"))
(setq temperr *error*)
(setq *error* trap)
(command "dimsah" "off")
(command "dimse2" "off")
(command "dimblk2" "")
(princ)
) ;defun
;;;*===========================================================
(defun trap (errmsg)
(command nil nil nil)
(if (not (member errmsg '("console break" "Function Cancelled"))
)
(princ (strcat "\nError: " errmsg))
) ;
(setvar "clayer" oldlayer)
(setvar "blipmode" 0)
(setvar "menuecho" 0)
(setvar "highlight" 1)
(setvar "osmode" oldsnap)
(setvar "pickbox" oldpick)
(command "dimsah" "off")
(command "dimse2" "off")
(command "dimblk2" "")
(princ "\nError Resetting Enviroment ")
(terpri)
(setq *error* temperr)
(princ)
) ;defun
;;;*===========================================================
(defun reset ()
(setq *error* temperr)
(setvar "clayer" oldlayer)
(setvar "blipmode" 0)
(setvar "menuecho" 0)
(setvar "highlight" 1)
(setvar "osmode" oldsnap)
(setvar "pickbox" oldpick)
(princ)
)
(defun c:tot (/ CT IN NM ST SM)
(initerr)
(setq ST (ssget))
(setq CT 0)
(setq SM 0)
(while (< CT (sslength ST))
(setq NM(ssname ST CT))
(COND (OR (= "TEXT") (="MTEXT")) (cdr (assoc 0(entget NM)))
(princ)
(progn
(ssdel NM ST)
(setq CT(1- CT))
)
)
(setq CT(1+ CT))
)
(setq CT 0)
(if (= nil ST)
(princ)
(while (< CT (sslength ST))
(setq NM(ssname ST CT))
(setq IN (atoi (cdr (assoc 1 (entget NM)))))
(princ IN)
(setq SM (+ IN SM))
(princ "\n")(princ)
(setq CT(1+ CT))
)
)
(princ (strcat "Total = " (rtos SM)))
(princ)
)
;defun
;;;*===========================================================
我的理解:
[列表]
[*]您希望能够选择一个或多个块,并检索块属性中某些数字的总和。
[/列出]一些问题:
[列表]
[*]属性是否仅为数字(或同一属性中是否有其他文本?)
[*]块是否只有一个属性?
[*]您知道所涉及属性的名称吗?它是否总是相同的?
[*]您想要什么输出(即文本插入、打印到命令行、警报框?)
谢谢
李 对不起,我睡眠不足,新生儿+嘈杂的叫声=僵尸
不确定这是否有帮助
1在块读取属性或其文本的情况下,可以选择文本或块的对象。
2现在你有了答案,把它写到另一个区块。
3没问题,我现在这样做。
好的,我现在使用VBA进行块操作,好的是属性编号没有标签,即attrib(0)attrib(1)atrrib(2)等,块是唯一的,除非重新创建,否则属性总是相同的数字。
因此,我选择文本或块并阅读答案,然后找到我想要更改的块并将答案写入其中。
Newpitname = "1" 'dummy to pass then return changed
pitname = Getpitname(Newpitname)
'Call Getpitname(pitname)
MsgBox "pitname selected is " & pitname
Function Getpitname(Newpitname As String) As String
Dim PitNameSelect As AcadObject
Dim pitattribs As Variant
ThisDrawing.Utility.GetEntity PitNameSelect, basepnt, "pick pit name : "
If PitNameSelect.ObjectName = "AcDbText" Then
Getpitname = PitNameSelect.TextString
End If
If PitNameSelect.ObjectName = "AcDbBlockReference" Then
pitblname = PitNameSelect.Name ' RETURNS BLOCK NAME
pitattribs = PitNameSelect.GetAttributes
Getpitname = pitattribs(0).TextString
End If
End Function
现在选择一个块获取其属性或插入一个新块并更新属性(这是在圣诞节前的论坛中)
attribs(7).TextString = pitsurfRL
attribs(.TextString = pitILin
attribs(.Update
attribs(7).Update
我仍然对你到底想做什么感到困惑,但希望我已经指出了如何做到这一点。 兄弟,谢谢你的帮助,但很遗憾我对vba一无所知。
所以我甚至不能操纵它
希望这会有所帮助。
我希望它的答案是17,。。。。。3 + 1 + 8 + 5.
幻影线是我的选择菜单。
所以带数字的文本(实际上是不可靠的文本…)我可以忽略它。 是的,这不是一个问题,只要选取所有对象,检查它们是什么,然后将它们的值作为数字加在一起。小心这些积木。
根据Lee Mac的观点,如果你选择一段包含数字的文本,那么找到数字将是一项更大的工作(请看我上一篇关于层代码的文章,几乎就在那里),默认情况下,如果它是任何类型的文本,因此没有使用,那么只需转换为数字,答案为false。
这里有大量的lisp示例,它们要求进行选择,并将该对象拉开,找到需要的值,即块多行文字文本子例程。可能需要一点搜索尝试“选择集”,很可能有一个集可以完成这一切。
你是说那个说“我能看到4”
是的,这是可以忽略的。只留下3、1、8、5供阅读。
Bigal,所以你说你发布的代码可以做到这一点??
(抱歉,这是一个漫长的一周)
干杯伙计们 有点意外,我仍然没有找到解决这个问题的方法。
有人看到了吗?
页:
[1]