明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 632|回复: 7

[提问] 删圆变十字线

[复制链接]
发表于 2018-8-11 14:00 | 显示全部楼层 |阅读模式
下面是框选,识别圆,以圆心画十字线的lisp代码
但是有个小问题,其中cr是指圆半径,但是我想让十字线长度为半径的60%,cl就是想要的值,但是cl (* cr 0.6)写上,下面的两个LINE中的cr改cl后就报错,不知道有什么问题,谁帮我解释下,需要怎么改才能实现十字线长度为半径的60%
  1. (defun c:cct ( / ss n ent enttype cc cr cl)
  2.   (setq ss (ssget) n 0)
  3.   (repeat (sslength ss)
  4.     (setq ent (ssname ss n)
  5.       enttype (cdr (assoc 0 (entget ent)))
  6.       cc (cdr (assoc 10 (entget ent)))
  7.       cr (cdr (assoc 40 (entget ent)))
  8.       ;cl (* cr 0.6)
  9.     )
  10.     (if (= enttype "CIRCLE")
  11.       (progn
  12.         (command "LINE" (list (- (car cc) cr) (cadr cc)) (list (+ (car cc) cr) (cadr cc)) "")
  13.         (command "LINE" (list (car cc) (- (cadr cc) cr)) (list (car cc) (+ (cadr cc) cr)) "")
  14.         (entdel ent)
  15.       )
  16.     )
  17.     (setq n (1+ n))

  18.   )
  19. )


发表于 2018-8-11 15:44 | 显示全部楼层
试了下,原版的和改成cl的都没有报错,正常运行。你是不是cl那行前面的分号没有删除?
发表于 2018-8-12 09:05 | 显示全部楼层
本帖最后由 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 | 显示全部楼层
本帖最后由 司徒妙嘉 于 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 | 显示全部楼层
lifuq1979 发表于 2018-8-12 09:05
没毛病,我只是删掉没用的
(defun c:cct ( / ss n ent enttype cc cr cl)
  (setq ss (ssget '((0 . "CIRC ...

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2018-8-14 12:04 | 显示全部楼层
 楼主| 发表于 2018-8-14 14:34 | 显示全部楼层
Andyhon 发表于 2018-8-14 12:04
ref:
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=178013

我竟然没想到,明明看到是些中点,交点!
发表于 2018-8-19 00:21 | 显示全部楼层
画十字线的时候捕捉没有关吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-20 08:07 , Processed in 5.028065 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表