川雪 发表于 2022-7-31 21:11:48

同样的代码,为什么上一行可以得到数据,下一行就不行。

(defun c:l2w()
(setvar "cmdecho" 0)
(setq en (entsel "\n 选取直线:"))
(setq nn (getint "\n 重复次数<5>:"))
(if (null nn) (set nn 5))
(setq endata (entget en))
(setq pt_10 (assoc 10 endata));用!pt_10可以得到10,
(setq pt_11 (assoc 11 endata));用!pt_11只能得到nil。
(setq ang (angle pt_10 pt_11))
(setq dd (distance pt_10 pt_11))
(setq bas1 pt_10)
(setq dd_nn (/ dd nn))
(command "pline" bas1 "a" "a" 180)
(repeat nn
    (setq bas2 (polar bas1 ang dd_nn))
    (command bas2)
    (setq bas1 bas2)
    )
(command "")
(entdel en)
)

川雪 发表于 2022-7-31 21:15:37

上面第7行与第8行。同样的代码,一个能得到数据另一个就不行。

yshf 发表于 2022-7-31 21:18:34

本帖最后由 yshf 于 2022-7-31 21:25 编辑

将:(setq endata (entget en))
改为:(setq endata (entget (car en)))

entsel
提示用户通过指定一个点来选择单个对象(图元)
(entsel )参数msg用于提示用户的字符串。如果省略该参数,则提示信息为“选择对象”。返回值表,其中第一个元素是用户所选对象的图元名,第二个元素是用户选择对象时指定的拾取点的坐标值(用当前 UCS 表示)。

川雪 发表于 2022-7-31 21:25:59

yshf 发表于 2022-7-31 21:18
将:(setq endata (entget en))
改为:(setq endata (entget (car en)))



还是不行。

tigcat 发表于 2022-7-31 21:40:18

(defun c:l2w()
(setvar "cmdecho" 0)
(setq en (entsel "\n 选取直线:"))
(setq nn (getint "\n 重复次数<5>:"))
(if (null nn) (setq nn 5))
(setq endata (entget (car en)))
(setq pt_10 (cdr(assoc 10 endata)));用!pt_10可以得到10,
(setq pt_11 (cdr(assoc 11 endata)));用!pt_11只能得到nil。
(setq ang (angle pt_10 pt_11))
(setq dd (distance pt_10 pt_11))
(setq bas1 pt_10)
(setq dd_nn (/ dd nn))
(command "pline" bas1 "a" "a" 180)
(repeat nn
    (setq bas2 (polar bas1 ang dd_nn))
    (command bas2)
    (setq bas1 bas2)
    )
(command "")
(entdel (car en))
)

yshf 发表于 2022-7-31 21:51:25

(defun c:l2w()
(setvar "cmdecho" 0)
(If (setq en (entsel "\n 选取直线:"))
      (progn
         (setq nn (getint "\n 重复次数<5>:"))
         (if (null nn) (setq nn 5))
         (setq endata (entget (car en)))
         (setq pt_10 (cdr (assoc 10 endata)));用!pt_10可以得到10,
         (setq pt_11 (cdr (assoc 11 endata)));用!pt_11只能得到nil。
         (setq ang (angle pt_10 pt_11))
         (setq dd (distance pt_10 pt_11))
         (setq bas1 pt_10)
         (setq dd_nn (/ dd nn))
         (command "pline" bas1 "a" "a" 180)
         (repeat nn
             (setq bas2 (polar bas1 ang dd_nn))
             (command bas2)
             (setq bas1 bas2)
         )
         (command "")
         (entdel (car en))
      )
   )
   (princ)
)

hh_lj007 发表于 2022-8-1 08:38:39

5、6楼是正解

川雪 发表于 2022-8-1 22:08:09

谢谢两位。

川雪 发表于 2022-8-1 22:20:25

能解释一下吗?
页: [1]
查看完整版本: 同样的代码,为什么上一行可以得到数据,下一行就不行。