我认为新文本的起点可以是旧文本中的一个,也可以和旧文本平行,当然也可以是点。
这只是为了你的利益
你会发现这很难解决
我不知道该怎么做
;;=======================================================;;
(defun _getnearest (ss pt / en)
(while (setq en (ssname ss 0))
(setq elist (entget en)
ip (cdr (assoc 10 elist))
box (textbox elist)
up (mapcar '+ ip (cadr box))
)
(setq tmp (cons up en)
data (cons tmp data)
tmp nil)
(ssdel en ss)
)
(vl-sort data (function (lambda (a b)
(< (distance (car a) pt)
(distance (car b) pt)))))
(cdar data)
)
;;=======================================================;;
(defun dxf (key en)
(cdr (assoc key (entget en)))
)
;;=======================================================;;
(defun C:ELV (/ atleft atright bref cnt ip lefttext lp righttext rp ss txt)
(command "_zoom" "e")
(setq ss (ssget "X" (list (cons 0 "INSERT")(cons 2 "DOT-1"))))
(setq blocks (sslength ss)
cnt 0
)
(while (setq bref (ssname ss 0))
(setq ip (cdr (assoc 10 (entget bref)))
lp (list (- (car ip) 7)(cadr ip))
rp (list (+ (car ip) 3)(cadr ip))
)
(if (and
(setq atleft (ssget "F"
(list ip lp)
(list
'(0 . "TEXT")
'(8 . "HI")
'(62 . 14)
'(40 . 1.5)
'(41 . 1.0)
'(7 . "PLOTTER_1"))))
(setq atright (ssget "F"
(list ip rp)
(list
'(0 . "TEXT")
'(8 . "HI")
'(62 . 14)
'(40 . 1.5)
'(41 . 1.0)
'(7 . "PLOTTER_1")))))
(progn
(if (= 1 (sslength atleft))
(setq lefttext (ssname atleft 0))
(setq lefttext (_getnearest atleft ip))
)
(if (= 1 (sslength atright))
(setq righttext (ssname atright 0))
(setq righttext (_getnearest atright ip))
)
(if (and lefttext righttext)
(progn
(setq cnt (1+ cnt))
(setq txt (strcat (dxf 1 lefttext)"."(dxf 1 righttext)))
(princ "\n")( princ txt)
;; do what you need with texts here
)
)
)
)
(ssdel bref ss)
)
(alert (strcat"Blocks found: " (itoa blocks) "\nTexts found: " (itoa cnt) ))
(princ)
)
~'J'~
谢谢亲爱的fixo,我使用这些代码,如果有任何问题,请稍后写信给你
不,谢谢,
这个例行程序效果很差
再次检查编辑的版本
你会看到这两个街区是否很近
在这种情况下,左右文本替换错误:
;;=======================================================;;
(defun _getnearest (ss pt / en)
(while (setq en (ssname ss 0))
(setq elist (entget en)
ip (cdr (assoc 10 elist))
box (textbox elist)
up (mapcar '+ ip (cadr box))
)
(setq tmp (cons up en)
data (cons tmp data)
tmp nil)
(ssdel en ss)
)
(vl-sort data (function (lambda (a b)
(< (distance (car a) pt)
(distance (car b) pt)))))
(cdar data)
)
;;=======================================================;;
(defun dxf (key en)
(cdr (assoc key (entget en)))
)
;;=======================================================;;
(defun C:ELV (/ atleft atright bref cnt ip lefttext lp righttext rp ss txt)
(command "_zoom" "e")
(setq ss (ssget "X" (list (cons 0 "INSERT")(cons 2 "DOT-1"))))
(setq blocks (sslength ss)
cnt 0
)
(while (setq bref (ssname ss 0))
(setq ip (cdr (assoc 10 (entget bref)))
lp (list (- (car ip) (cadr ip))
rp (list (+ (car ip) 4)(cadr ip))
)
(if (and
(setq atleft (ssget "F"
(list ip lp)
(list
'(0 . "TEXT")
'(8 . "HI")
'(62 . 14)
'(40 . 1.5)
'(41 . 1.0)
'(7 . "PLOTTER_1"))))
(setq atright (ssget "F"
(list ip rp)
(list
'(0 . "TEXT")
'(8 . "HI")
'(62 . 14)
'(40 . 1.5)
'(41 . 1.0)
'(7 . "PLOTTER_1")))))
(progn
(if (= 1 (sslength atleft))
(setq lefttext (ssname atleft 0))
(setq lefttext (_getnearest atleft ip))
)
(if (= 1 (sslength atright))
(setq righttext (ssname atright 0))
(setq righttext (_getnearest atright ip))
)
(if (and lefttext righttext)
(progn
(setq cnt (1+ cnt))
(setq txt (strcat (dxf 1 lefttext)"."(dxf 1 righttext)))
(princ "\n")( princ txt)
(setq apt (list (car ip)(+ (cadr ip) 2.) 0.0))
(entmake
(list
'(0 . "TEXT")
'(100 . "AcDbEntity")
'(67 . 0)
'(410 . "Model")
'(8 . "BM")
'(62 . 256)
'(100 . "AcDbText")
(cons 10 apt)
(cons 11 (list (car apt)(+ (cadr apt) 0.75)0.0))
(cons 401.5)
(cons 1txt)
'(50 . 0.0)
'(41 . 1.0)
'(51 . 0.0)
'(7 . "PLOTTER_1")
'(71 . 0)
'(72 . 1)
(cons 210 (list 0.0 0.0 1.0))
'(73 . 2)))
;; change the rest to suit
)
)
)
)
(ssdel bref ss)
)
(alert (strcat"Blocks found: " (itoa blocks) "\nTexts recreated: " (itoa cnt) ))
(princ)
)
我还没有其他想法如何检测最近的文本,对吗
~'J'~ 这是我的。它(现在)很难看,所以我不想发布它的开源版本。
正如你从视频中看到的,我这样做是为了让你为最初的3个选择选择正确的对象。
最后一个多行文字对象放置在新层上点块的插入点。 尊敬的先生:
你好
我用你们的FAS文件,从左4位数到右2位数,和你们的慢动作表演一样,但不要在屏幕上出现最终的黄色结果!为什么?
再次下载,我今天早上做了一个更新(忘记了一个子例程)。
你好,fixo
我认为必须在每个点周围创建一个选择集窗口,使其宽度等于:((Text.Heigt)+epsilon),两个字符串位于该窗口中,窗口的基位于点上。
ِ尊敬的alanjt
特别感谢你帮助我完成这个项目。谢谢你所做的一切,你太棒了。。。。
玩得愉快 我认为这是一个信号,它的工作。我等着寄支票眨眼:
别动,这里有很多人比我聪明得多。
页:
1
[2]