我正在努力更改正确的DXF,因为9 DXF为300。
我使用命令(entget(car(entsel)))获得以下列表:
((-1 . <Entity name: 223791faf20>)
(0 . "HSB_BEAMENT")
(330 . <Entity name: 21b6fa889f0>)
(5 . "5A612")
(100 . "AcDbEntity")
(67 . 0)
(410 . "Model")
(8 . "E-01")
(62 . 92)
(100 . "Hsb_BeamEnt")
(70 . 3)
(10 -86756.4 43492.7 3022.5)
(15 -86756.4 43492.7 530.094)
(142 . 5469.91)
(143 . -485.094)
(11 0.0 0.0 1.0)
(12 -1.83697e-16 -1.0 0.0)
(13 1.0 -1.83697e-16 0.0)
(14 0.0 0.0 0.0)
(140 . 45.0)
(141 . 295.0)
(300 . "")
(70 . 10)
(79 . 0)
(332 . <Entity name: 0>)
(144 . 0.0)
(300 . "STUTZ")
(300 . "Bearbejdet")
(300 . "490")
(300 . "E-01")
(300 . "")
(300 . "")
(300 . "Ribbe C24 295x45")
(300 . "C24")
(301 . "")
(302 . "")
(71 . -1)
(72 . 0)
(73 . 0)
(74 . 6))
在这里,我想更改索引4(300。“ E-01”)上的DXF 300
我创建了以下代码:但是如何选择索引?并获得我想要的DXF。
(defun c:changeattr()
(setq a (car (entsel "\nSelect a object: ")))
(setq b (entget a))
(setq c (subst (cons 300 "F200") (assoc 300 b) b)) ; Trying to update and change the Label Property
(entmod c)
(entupd a)
(prompt "\nAttribute entity updated.")
(princ)
)
高级帮助。我很感激:)
答案 0 :(得分:1)
尝试一下:
(setq def (entget (car(entsel ))) )
(defun DXF:Put ( def code index val / subs cp
*error* ) (defun *error* ( msg / )
(if (not (null msg ) ) (progn (princ "\nDXF:Pu:*error*: " ) (princ msg ) (princ "\n") ) )
)
(setq cp def )
( while (setq item (assoc code cp ))
(setq subs (append subs (list item ) ) )
(setq cp (cdr (member item cp ) ))
)
(subst (cons code val) (nth index subs ) def )
)
(setq code 300
index 4
val "test"
)
(DXF:Put def code index val )
然后当然是endmod
,entupd
答案 1 :(得分:1)
根据您在这里的问题,我怀疑是否要根据索引更新关联列表,因为有时我们无法预测确切的索引位置。请检查索引更改的可能性。
在这里,我写了两个有助于更改关联列表的函数。
1.根据索引更新关联列表。
2.在OldValue的基础上更新关联列表。
此功能包含在您的代码中,如下所示。
(defun c:changeattr()
;------------------------------------------New Function To change associate list---------------------------------------------;
;This function Update Associative list by index
;[ key ]-> Key Value in associate list
;[ NewValue ]-> New Value to replace
;[ index ]-> Index
;[ InputList ]-> Associate List
(defun UpdateAssocListByIndex(key NewValue index InputList / index)
;set index value to 1 if input is nil or empty string
;Change on 21-09-218 By Dinesh Pawar to remove bug if index input is nil or blank string
;(setq index (if (or (= nil index) (= "" index) ) 0 index))--Before 21-09-2018
(setq index (if (or (= nil index) (= "" index) ) 1 index));change 0-1
(mapcar '(lambda (x)
(if (= (car x) key);check if current key is equal to inout key
(if (= index 1)
(setq index (- index 1)
x (cons key NewValue));if index zero then add list with new value and lower index
(setq index (- index 1); lower index
x x ;this act as output to lambda function
)
)
x;ouput to lambda
)
);Lambda end here
InputList ; input list to run lambda loop for each element in InputList
)
)
;This function update List by Old Key value.
;[ key ]-> Key Value in associate list
;[ NewValue ]-> New Value to replace
;[ OldKeyValue ]-> Old Value
;[ InputList ]-> Associate List
(defun UpdateAssocListBykeyValue (key NewValue OldKeyValue InputList / index)
(subst (cons key NewValue) (cons key OldKeyValue) InputList)
)
;-------------------------------------Your Code ----------------------------------------------------------------------------;
(setq a (car (entsel "\nSelect a object: ")))
(setq b (entget a))
;(UpdateAssocListByIndex key NewValue index InputList)
(setq c (UpdateAssocListByIndex 300 "F200" 4 b));see modification.
;(setq c (subst (cons 300 "F200") (assoc 300 b) b)) ; Trying to update and change the Label Property
(entmod c)
(entupd a)
(prompt "\nAttribute entity updated.")
(princ)
)
希望对您有帮助。