司徒妙嘉 发表于 2018-8-11 14:00:07

删圆变十字线

下面是框选,识别圆,以圆心画十字线的lisp代码
但是有个小问题,其中cr是指圆半径,但是我想让十字线长度为半径的60%,cl就是想要的值,但是cl (* cr 0.6)写上,下面的两个LINE中的cr改cl后就报错,不知道有什么问题,谁帮我解释下,需要怎么改才能实现十字线长度为半径的60%
(defun c:cct ( / ss n ent enttype cc cr cl)
(setq ss (ssget) n 0)
(repeat (sslength ss)
    (setq ent (ssname ss n)
      enttype (cdr (assoc 0 (entget ent)))
      cc (cdr (assoc 10 (entget ent)))
      cr (cdr (assoc 40 (entget ent)))
      ;cl (* cr 0.6)
    )
    (if (= enttype "CIRCLE")
      (progn
      (command "LINE" (list (- (car cc) cr) (cadr cc)) (list (+ (car cc) cr) (cadr cc)) "")
      (command "LINE" (list (car cc) (- (cadr cc) cr)) (list (car cc) (+ (cadr cc) cr)) "")
      (entdel ent)
      )
    )
    (setq n (1+ n))

)
)

lostbalance 发表于 2018-8-11 15:44:56

试了下,原版的和改成cl的都没有报错,正常运行。你是不是cl那行前面的分号没有删除?

lifuq1979 发表于 2018-8-12 09:05:53

本帖最后由 lifuq1979 于 2018-8-12 09:13 编辑

没毛病,我只是删掉没用的
(defun c:cct ( / ss n ent enttype cc cr cl)
(setq ss (ssget '((0 . "CIRCLE"))) n -1)
(repeat (sslength ss)
    (setq ent (ssname ss (setq n (1+ n)))
      cc (cdr (assoc 10 (entget ent)))
      cr (*(cdr (assoc 40 (entget ent)))0.6)
    )
   (command "LINE" (list (- (car cc) cr) (cadr cc)) (list (+ (car cc) cr) (cadr cc)) "")
   (command "LINE" (list (car cc) (- (cadr cc) cr)) (list (car cc) (+ (cadr cc) cr)) "")
   (entdel ent)
)
)

司徒妙嘉 发表于 2018-8-14 11:35:29

本帖最后由 司徒妙嘉 于 2018-8-14 11:39 编辑

lostbalance 发表于 2018-8-11 15:44
试了下,原版的和改成cl的都没有报错,正常运行。你是不是cl那行前面的分号没有删除?
AutoCAD 2018 X64 ENWin10 X64 EN
以下是代码
(defun c:cct ( / ss n ent enttype cc cr cl)
      (setq ss (ssget) n 0)
      (repeat (sslength ss)
                (setq ent (ssname ss n)
                        enttype (cdr (assoc 0 (entget ent)))
                        cc (cdr (assoc 10 (entget ent)))
                        cr (cdr (assoc 40 (entget ent)))
                        cl (* cr 0.6)
                )
                (if (= enttype "CIRCLE")
                        (progn
                              (command "LINE" (list (- (car cc) cl) (cadr cc)) (list (+ (car cc) cl) (cadr cc)) "")
                              (command "LINE" (list (car cc) (- (cadr cc) cl)) (list (car cc) (+ (cadr cc) cl)) "")
                              (entdel ent)
                        )
                )
                (setq n (1+ n))

      )
)

以下是CAD的console反馈
Command: APPLOAD c2cc.lsp successfully loaded.
Command:
Command:
Command: CCT
Select objects: Specify opposite corner: 5 found
Select objects:; error: bad argument type: numberp: nil

参数类型错误??

司徒妙嘉 发表于 2018-8-14 11:47:22

lifuq1979 发表于 2018-8-12 09:05
没毛病,我只是删掉没用的
(defun c:cct ( / ss n ent enttype cc cr cl)
(setq ss (ssget '((0 . "CIRC ...

为什么会是这样令人匪夷所思的结果?

Andyhon 发表于 2018-8-14 12:04:07

ref:
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=178013

司徒妙嘉 发表于 2018-8-14 14:34:54

Andyhon 发表于 2018-8-14 12:04
ref:
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=178013

我竟然没想到,明明看到是些中点,交点!

jin1114 发表于 2018-8-19 00:21:26

画十字线的时候捕捉没有关吧
页: [1]
查看完整版本: 删圆变十字线