明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 524|回复: 6

[提问] 如何在一条直线上绘制带有条件的多个圆

[复制链接]
发表于 2022-8-4 09:35 | 显示全部楼层 |阅读模式
15明经币
问题如图所示,代码如下,后面改咋写,求大佬指点


(defun c:cs()
   (setvar "cmdecho" 0) ;关闭普通命令提示信息
  (setvar "osmode" 0)  ;关闭对象捕捉状态
  (setq d1(getreal "直线的长度为:"))
  (SETQ pt0(getpoint "插入点:"))
  (setq p1(list (+ (car pt0) d1) (cadr pt0)))
  (command "line" pt0 p1 "")
  (command "circle" pt0 "d" 10 "")
  (command "circle" p1 "d" 10 "")




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

最佳答案

查看完整内容

(defun c:NM(/ d1 n1 p1 pd1 pt0 pt1) (setq d1(getreal "直线的长度为:")) (SETQ pt0(getpoint "插入点:")) (setq n1(fix(/ d1 75))) (if(
发表于 2022-8-4 09:35 | 显示全部楼层
(defun c:NM(/ d1 n1 p1 pd1 pt0 pt1)
  (setq d1(getreal "直线的长度为:"))
        (SETQ pt0(getpoint "插入点:"))
        (setq n1(fix(/ d1 75)))
        (if(<(* 0.5(- d1(* n1 75)))35)
                (setq n1(1- n1))
        )
        (setq pd1(* 0.5(- d1(* n1 75))))
        (setq pt1(polar pt0 0 d1))
        (entmake (list '(0 . "LINE") (cons 10 pt0) (cons 11 pt1)))
       
        (setq p1(polar pt0 0 pd1))
        (repeat (1+ n1)
                (entmake (list '(0 . "CIRCLE") (cons 10 p1) (cons 40  5)))
                (setq p1(polar p1 0 75))               
        )
        (princ)
)
回复

使用道具 举报

 楼主| 发表于 2022-8-4 10:31 | 显示全部楼层
xj6019 发表于 2022-8-4 10:08
(defun c:NM(/ d1 n1 p1 pd1 pt0 pt1)
  (setq d1(getreal "直线的长度为:"))
        (SETQ pt0(getpoint "插入 ...

大佬,你这两个端点没有圆啊,能把端点的两个圆加上吗

回复

使用道具 举报

发表于 2022-8-4 10:36 | 显示全部楼层

(defun c:cs()
    (setvar "cmdecho" 0) ;关闭普通命令提示信息
    (setvar "osmode" 0)  ;关闭对象捕捉状态
    (If (>= (setq d1 (getreal "直线的长度为:")) (+ 35 75 35))
        (if (SETQ pt0 (getpoint "插入点:"))
            (progn
                (setq m (fix (/ d1 75.0)))
                (cond ((> (- d1 (* m 75)) 70)
                          (setq m (1+ m))
                      )
                      ((< (- d1 (* m 75)) 70)
                          (setq m (1- m))
                      )
                )
                (setq fdcd1 (* 0.5 (- d1 (* m 75))))

                (command "._line" pt0 (mapcar '+ pt0 (list d1 0 0)) "")
                (command "._circle" pt0 "d" 10 "")
                (command "._circle" (mapcar '+ pt0 (list d1 0 0)) "d" 10 "")
                (setq pt (mapcar '+ pt0 (list fdcd1 0 0)))
                (repeat (1+ m)
                     (command "._circle" pt "d" 10 "")
                     (setq pt (mapcar '+ pt (list 75.0 0 0)))
                )
            )
            (alert "未输入插入点!")          
        )
        (alert (strcat "输入的为:" (vl-princ-to-string d1) ",小于(35+75+35),不符合要求!"))   
    )
    (princ)
)
回复

使用道具 举报

发表于 2022-8-4 10:44 | 显示全部楼层
世人皆醉 发表于 2022-8-4 10:31
大佬,你这两个端点没有圆啊,能把端点的两个圆加上吗

最后补俩圆就行
(defun c:NM(/ d1 n1 p1 pd1 pt0 pt1)
  (setq d1(getreal "直线的长度为:"))
        (setq pt0(getpoint "插入点:"))
        (setq n1(fix(/ d1 75)))
        (if(<(* 0.5(- d1(* n1 75)))35)
                (setq n1(1- n1))
        )
        (setq pd1(* 0.5(- d1(* n1 75))))
        (setq pt1(polar pt0 0 d1))
        (entmake (list '(0 . "LINE") (cons 10 pt0) (cons 11 pt1)))
      
        (setq p1(polar pt0 0 pd1))
        (repeat (1+ n1)
                (entmake (list '(0 . "CIRCLE") (cons 10 p1) (cons 40  5)))
                (setq p1(polar p1 0 75))               
        )
                 (entmake (list '(0 . "CIRCLE") (cons 10 pt0) (cons 40  5)))
                  (entmake (list '(0 . "CIRCLE") (cons 10 pt1) (cons 40  5)))
        (princ)
)
回复

使用道具 举报

发表于 2022-8-4 10:47 | 显示全部楼层
本帖最后由 llsheng_73 于 2022-8-4 11:04 编辑

  1. (defun tt(e d d1 / n dist);;;e任意曲线,d中间圆间距,d1两端最小距离d1<= 1/2d
  2.   (setq dist(vlax-curve-getdistatparam e(vlax-curve-getendparam e))
  3.         n(fix(/ dist d))
  4.         n(if(>(rem dist d)(+ d1 d1))n(1- n))
  5.         d1(-(*(- dist(* n d))0.5)d))
  6.   (entmakex(mapcar'cons'(0 10 40)(list"circle"(vlax-curve-getstartpoint e)5)))
  7.   (repeat(1+ n)(entmakex(mapcar'cons'(0 10 40)(list"circle"(vlax-curve-getpointatdist e(setq d1(+ d1 d)))5))))
  8.   (entmakex(mapcar'cons'(0 10 40)(list"circle"(vlax-curve-getendpoint e)5))))

(tt(car(entsel"任意曲线"))75 33)

评分

参与人数 1明经币 +1 收起 理由
世人皆醉 + 1

查看全部评分

回复

使用道具 举报

发表于 2023-11-7 19:11 | 显示全部楼层
这个还是不错的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-2 11:02 , Processed in 0.757307 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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