KAPC 发表于 2022-7-6 14:27:46

从文本指向

我有一个图形,有一组点(2000+),具有正确的X,Y信息,但其中Z是0。Z高度包含在点附近的文本中。
 
任何人都可以共享一个lisp例程,该例程将文本信息作为Z值附加到点,或将文本转换为具有适当Z值的点。
 
点位于ROAD\u PT和SITE\u PT层上。
文字信息位于ROAD\u ELEV和SITE\u ELEV图层上。
 
谢谢

Commandobill 发表于 2022-7-6 14:34:46

你有绘画的例子吗?

KAPC 发表于 2022-7-6 14:39:56

干得好

eldon 发表于 2022-7-6 14:45:01

如果你有原始的数据文本文件,它会更容易。
 
我看到一些观点没有文字-然后呢?

KAPC 发表于 2022-7-6 14:47:26

问题是没有文本文件。
没有文本的点有一个参考号,就像其他点一样-为了清晰起见,我刚刚关闭了图层。

eldon 发表于 2022-7-6 14:53:15

这将有助于了解文本是否有与点相同的理由,即底部中心?
同样有用的是一个有20个左右点的绘图片段,这样任何能够编写Lisp的人都可以进行一些实验。

Lee Mac 发表于 2022-7-6 14:59:59

正如所暗示的,这里困难的部分是识别(通过编程角度)哪个文本项与哪个点对应。
 
在SelectionSet过程中,项目是随机收集的,因此大多数情况下不会为点分配正确的Z值。
 
另一种选择是在每个点周围创建一个交叉窗口的选择集,但这显然仍然不是100%准确,因为可能会遗漏一些文本项。
 
另一个需要考虑的选项是按任意坐标(例如x)对点和文本的两个选择集进行排序,如果文本基点接近该点,则两个选择集的顺序将正确。

Lee Mac 发表于 2022-7-6 15:02:11

 
试一试:
 

(defun c:ptZ (/ spc ss Objlst)
(vl-load-com)
(setq spc (vla-get-ModelSpace
             (vla-get-ActiveDocument
               (vlax-get-acad-object))))
(if (setq ss (ssget "_X" '((0 . "TEXT") (8 . "ROAD_ELEV,SITE_ELEV"))))
   (progn
   (setq Objlst (mapcar 'cadr (ssnamex ss)))
   (mapcar
       (function
         (lambda (x)
         (vla-addPoint spc
             (vlax-3D-point x))))            
   (mapcar
       (function
         (lambda (x y)
         (list (car x) (cadr x) (distof y))))
       (mapcar
         (function
         (lambda (x)
             (cdr (assoc 10 (entget x))))) Objlst)
       (mapcar
         (function
         (lambda (x)
             (cdr (assoc 1 (entget x))))) Objlst)))
   (mapcar 'entdel Objlst))
   (princ "\n<!> No Text Found <!>"))
(princ))

 
 
{ModelSpace}

KAPC 发表于 2022-7-6 15:08:05

下面是随机选择点的dwg
积分。图纸

eldon 发表于 2022-7-6 15:10:40

我看到文本插入点大多位于与该点的某个偏移处,但存在变化,并且文本的大小似乎会改变偏移。相当棘手。我有一个lisp,它在点的(x,y)处放置一个新点,z值从文本中提取,但手动一次一个点,但现在,人们似乎希望能在短时间内完成。
给你李:眨眼:
页: [1] 2
查看完整版本: 从文本指向