cadman2009 发表于 2022-7-6 12:39:36

 
我认为新文本的起点可以是旧文本中的一个,也可以和旧文本平行,当然也可以是点。

fixo 发表于 2022-7-6 12:39:51

 
这只是为了你的利益
你会发现这很难解决
我不知道该怎么做
 
 

;;=======================================================;;
(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'~

cadman2009 发表于 2022-7-6 12:44:46

 
谢谢亲爱的fixo,我使用这些代码,如果有任何问题,请稍后写信给你

fixo 发表于 2022-7-6 12:48:30

 
不,谢谢,
这个例行程序效果很差
再次检查编辑的版本
你会看到这两个街区是否很近
在这种情况下,左右文本替换错误:
 

;;=======================================================;;
(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'~

alanjt 发表于 2022-7-6 12:51:53

这是我的。它(现在)很难看,所以我不想发布它的开源版本。
 
 
正如你从视频中看到的,我这样做是为了让你为最初的3个选择选择正确的对象。
 
最后一个多行文字对象放置在新层上点块的插入点。

cadman2009 发表于 2022-7-6 12:53:13

尊敬的先生:
你好
我用你们的FAS文件,从左4位数到右2位数,和你们的慢动作表演一样,但不要在屏幕上出现最终的黄色结果!为什么?

alanjt 发表于 2022-7-6 12:58:33

 
再次下载,我今天早上做了一个更新(忘记了一个子例程)。

cadman2009 发表于 2022-7-6 13:00:22

 
你好,fixo
我认为必须在每个点周围创建一个选择集窗口,使其宽度等于:((Text.Heigt)+epsilon),两个字符串位于该窗口中,窗口的基位于点上。

cadman2009 发表于 2022-7-6 13:04:02

 
 
ِ尊敬的alanjt
特别感谢你帮助我完成这个项目。谢谢你所做的一切,你太棒了。。。。
玩得愉快

alanjt 发表于 2022-7-6 13:06:26

我认为这是一个信号,它的工作。我等着寄支票眨眼:
 
别动,这里有很多人比我聪明得多。
页: 1 [2]
查看完整版本: 编辑立面帮助