编写lisp程序让CAD选中某些字符并标记

 写CAD LISP程序,获取选中矩形的各个顶点的坐标,并存入变量;
然后根据输入的字符"R1011"在当前CAD图纸中找到这个字符,将字符的坐标存入变量,以该坐标变量为起点绘制直线,直线终点与上述矩形的边垂直相交,确保直线的长度是最短的

以下是一个示例的CAD LISP程序,实现了上述功能:


(defun c:drawLineFromRect ()
  (setq rectPoints (getRectPoints))
  (setq charPoint (findCharPoint "R1011"))
  (setq lineEnd (getShortestLineEnd rectPoints charPoint))
  (command "line" charPoint lineEnd)
)

(defun getRectPoints ()
  (setq rectPoints (list))
  (setq selSet (ssget))
  (if selSet
    (progn
      (setq ent (ssname selSet 0))
      (setq point1 (entget (car (entsel "\nSelect first corner of rectangle: ")))
      (setq point2 (entget (car (entsel "\nSelect opposite corner of rectangle: ")))
      (setq x1 (cdr (assoc 10 point1))
      (setq y1 (cdr (assoc 20 point1))
      (setq x2 (cdr (assoc 10 point2))
      (setq y2 (cdr (assoc 20 point2))
      (setq rectPoints (list (list x1 y1) (list x2 y1) (list x2 y2) (list x1 y2))
      rectPoints
    )
  )
)

(defun findCharPoint (char)
  (setq charPoint (list 0 0 0))
  (setq textSet (ssget "X" (list (cons 0 "TEXT") (cons 1 char))))
  (if textSet
    (progn
      (setq ent (ssname textSet 0))
      (setq charPoint (cdr (assoc 10 (entget ent)))
      charPoint
    )
  )
)

(defun getShortestLineEnd (rectPoints charPoint)
  (setq shortestLineEnd (list 0 0 0))
  (setq minDist 1e10)
  (foreach point rectPoints
    (setq dist (distance point charPoint))
    (if (< dist minDist)
      (progn
        (setq minDist dist)
        (setq shortestLineEnd point)
      )
    )
  )
  shortestLineEnd
)

在这个示例程序中,首先定义了四个函数:getRectPoints 用于获取选中矩形的各个顶点的坐标;findCharPoint 用于根据输入的字符在当前CAD图纸中找到字符的坐标;getShortestLineEnd 用于根据字符的坐标和矩形的顶点坐标计算直线的终点;c:drawLineFromRect 是主函数,用于调用上述三个函数,并绘制直线。
在主函数中,首先调用 getRectPoints 和 findCharPoint 获取矩形的顶点坐标和字符的坐标,然后调用 getShortestLineEnd 计算直线的终点,最后使用 command "line" charPoint lineEnd 绘制直线。
请注意,这只是一个简单的示例程序,实际应用中可能需要根据实际情况进行适当的修改和扩展。
 

你可能感兴趣的:(lisp,windows,开发语言)