LISP,替换l的智能方法
你好我正在寻找一种方法,用括号(块)查找并替换几行。有人有什么好主意吗?我要重放的所有线条都是线型“LBR”。
我可能会试着修改这个脚本,帮助我写作。欢迎一些好点子,谢谢。
; Move linetype <LBR> to layer <LBR>
(setq Layer "LBR")
(if (tblsearch "LAYER" Layer)
(if (setq LSelect (ssget "_X" '((6 . "LBR"))))
((lambda (j / sn)
(while
(setq sn (ssname LSelect (setq j (1+ j))))
(entupd
(cdr
(assoc
-1
(entmod (append (entget sn)
(list '(6 . "BYLAYER")
'(370 . -1)
'(62 . 256)
(cons 8 Layer)
)
)
)
)
)
)
)
)
-1
)
)
(princ (strcat "\n Layer name <" Layer "> is not found <!>"))
)
(if LSelect
(princ (strcat "\n <"
(itoa (sslength LSelect))
"> "
(if (> (sslength LSelect) 1)
"objects"
"object"
)
" moved to layer <"
Layer
">"
)
)
)
(princ)
)
选择线并获取其中点,然后将其用作括号块相对于选定线的角度的插入点。 Thx,听起来很简单,当你说的时候,我想我必须检查线的角度,试试看 提示:
*选择线图元。
*从检索起点和终点(dxf 10和dxf 11)获得角度。
*中点=从起点或终点形成的直线长度的一半距离,例如(极轴)。
*在中点插入支架块。
*删除线图元(如果需要)。
上载样例图形。 如果括号块的水平长度为1.0,则可以使用以下内容:
(defun c:addbrackets ( / ang blk dis enx inc pt1 pt2 sel )
(if
(and
(setq blk (LM:ssget "\nSelect Bracket Block: " '("_+.:E:S" ((0 . "INSERT")))))
(setq sel (LM:ssget "\nSelect Lines for Brackets: " '(((0 . "LINE")))))
)
(progn
(setq blk (assoc 2 (entget (ssname blk 0))))
(repeat (setq inc (sslength sel))
(setq enx (entget (ssname sel (setq inc (1- inc))))
pt1 (cdr (assoc 10 enx))
pt2 (cdr (assoc 11 enx))
ang (angle pt1 pt2)
dis (distance pt1 pt2)
)
(if (and (< (/ pi 2.0) ang) (<= ang (/ (* 3.0 pi) 2.0)))
(setq ang (+ ang pi))
)
(entmake
(list '(0 . "INSERT") blk
(cons 10
(polar
(mapcar '(lambda ( a b ) (/ (+ a b) 2.0)) pt1 pt2)
(- ang (/ pi 2.0))
(/ dis 4.0)
)
)
(cons 50 ang)
(cons 41 dis)
(cons 42 dis)
(cons 43 dis)
)
)
)
)
)
(princ)
)
;; ssget-Lee Mac
;; A wrapper for the ssget function to permit the use of a custom selection prompt
;;
;; Arguments:
;; msg - selection prompt
;; params - list of ssget arguments
(defun LM:ssget ( msg params / sel )
(princ msg)
(setvar 'nomutt 1)
(setq sel (vl-catch-all-apply 'ssget params))
(setvar 'nomutt 0)
(if (not (vl-catch-all-error-p sel)) sel)
)
(princ)
hi again,
i decided to draw a poly line insted, the proble is that i cant figure out in witch format the point is defined
;(setq BracketStart (643.75 320.00))
;(setq BracketEnd (31.25, 320.00))
(setq BracketStart (getpoint "\nEnter start point: "))
(setq BracketEnd (getpoint "\nEnter end point: "))
(defun c:Bracket (/ BracketStart BracketEnd LegLength FirstLeg FirstMiddleLeg MidPoint LastMiddleLeg LastLeg PointList ConstantSide BracketAngle BracketEnd BracketLength FirstAngle LastAngle CurrentSettings);; Default Values (setq Bracket:LegLength 4.0CurrentSettings (mapcar '(lambda (x) (cons x (getvar x))) '("cmdecho" "clayer" "plinewid")) ) (setvar "CMDECHO" 0) ;; Begin Main Function (if (and ;(setq BracketStart (643.75 320.00)) works...
draws brackets on all lines with linetype "LBR"... now it's easy to add a script that removes all lines with linetype LBR
(defun c:Bracket (/ BracketStart BracketEnd LegLength FirstLeg FirstMiddleLeg MidPoint LastMiddleLeg LastLeg PointList ConstantSide BracketAngle BracketEnd BracketLength FirstAngle LastAngle CurrentSettings);; Default Values (setq Bracket:LegLength 4.0CurrentSettings (mapcar '(lambda (x) (cons x (getvar x))) '("cmdecho" "clayer" "plinewid")) ) (setvar "CMDECHO" 0) (if (if (setq lSet (ssget "_X" '((6 . "LBR")))) (sssetfirst nil lSet) ) (progn ;(1) (setq inc (sslength lSet)) (repeat inc (setq enx (entget (ssname lSet (setq inc (1- inc)))) ;pt1 (cdr (assoc 10 enx)) ;pt2 (cdr (assoc 11 enx)) BracketEnd (cdr (assoc 10 enx)) BracketStart (cdr (assoc 11 enx)) ) ; Begin Main Function (if (and ;(setq BracketStart '(643.75 320.00 00.00)) ;(setq BracketEnd '(31.25 320.00 00.00)) ;(setq BracketStart (getpoint "\nEnter start point: ")) ;(setq BracketEnd (getpoint "\nEnter end point: ")) ) (progn (setq ConstantSide 0.707106781185 LegLength Bracket:LegLength BracketLength(distance BracketStart BracketEnd) BracketAngle (angle BracketStart BracketEnd) FirstAngle (+ BracketAngle (* pi (/ 45 180.0))) LastAngle (+ BracketAngle (* pi (/ 135 180.0))) FirstLeg (polar BracketStart FirstAngle LegLength) LastLeg (polar BracketEnd LastAngle LegLength) FirstMiddleLeg (polar FirstLeg BracketAngle (- (/ (distance FirstLeg LastLeg) 2.0) (* LegLength ConstantSide) ) ) MidPoint (polar FirstMiddleLeg FirstAngle LegLength) LastMiddleLeg(polar LastLeg (angle BracketEnd BracketStart) (- (/ (distance FirstLeg LastLeg) 2.0) (* LegLength ConstantSide) ) ) PointList (list BracketStart FirstLeg FirstMiddleLeg MidPoint LastMiddleLeg LastLeg BracketEnd ) ) (if (tblsearch "LAYER" "TEXT") (command "_.layer" "_Thaw" "Text" "_Set" "Text" "") (command "_.layer" "_Make" "Text" "") ) (if (and Bracket:Type (= (strcase Bracket:Type) "LINE") ) (command "_.line") (progn (setvar "PLINEWID" 0) (command "_.pline") ) ) (foreach n PointList (command "_non" n) ) (command "") (mapcar '(lambda (x) (setvar (car x)(cdr x))) CurrentSettings) ) ) ; End Main Function ) ) ;End Progn (1) ) (sssetfirst nil nil)(princ))
页:
[1]