明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1365|回复: 5

[已解答] 代码有些不明白,希望大神帮忙解释一下

[复制链接]
发表于 2013-11-13 20:48 | 显示全部楼层 |阅读模式
图片是效果图,下面的是代码。简单说明一下:选取两圆做内公切线,并en2圆内侧虚线减掉,然后阵列nn次。小弟提前谢过啊!!
我想询问:1.(command "line" "tan" p1 "tan" p4 "")中 tan 的作用,与(command "line" p1 p4 )的区别
                  2.(command "trim" en3 en4 "" (list en2 (polar cen2 ang (* -1 r2))) "")中使用list是什么意思,已经看见几次了都没能理解
(defun c:lsp_15()
   (setvar "cmdecho" 0)
   (setq en1 (car (entsel "\n选取圆1: ")))
   (setq en2 (car (entsel "\n选取圆2: ")))
   (setq en1data (entget en1))
   (setq en2data (entget en2))
   (setq cen1 (cdr (assoc 10 en1data)))
   (setq cen2 (cdr (assoc 10 en2data)))
   (setq r1 (cdr (assoc 40 en1data)))
   (setq r2 (cdr (assoc 40 en2data)))
   (setq ang (angle cen1 cen2))
   (setq p1 (polar cen1 (+ ang (/ pi 2)) r1))
   (setq p2 (polar cen1 (- ang (/ pi 2)) r1))
   (setq p3 (polar cen2 (+ ang (/ pi 2)) r2))
   (setq p4 (polar cen2 (- ang (/ pi 2)) r2))
   (command "line" "tan" p1 "tan" p4 "")
   (setq en3 (entlast))
   (command "line" "tan" p2 "tan" p3 "")
   (setq en4 (entlast))
   (setq nn (getint "\n重复次数<8>: "))
   (if (null nn) (setq nn 8))
   (command "trim" en3 en4 "" (list en2 (polar cen2 ang (* -1 r2))) "")
   (command "array" en3 en4 (polar cen2 ang r2) "" "p" cen1 nn "" "")
   (prin1)
)


本帖子中包含更多资源

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

x
发表于 2013-11-13 20:55 | 显示全部楼层
1.(command "line" "tan" p1 "tan" p4 "")中 tan 就是相切捕捉,
2.(command "trim" en3 en4 "" (list en2 (polar cen2 ang (* -1 r2))) "")中使用list是什么意思?
这句的trim命令新手经常会忽略一个细节,就是后面(list....)这句,不能简单输入图元名,需要将图元名和点用list构成一个表才能正常执行...
 楼主| 发表于 2013-11-14 09:04 | 显示全部楼层
ljpnb 发表于 2013-11-13 20:55
1.(command "line" "tan" p1 "tan" p4 "")中 tan 就是相切捕捉,
2.(command "trim" en3 en4 "" (list en ...

首先谢谢您啦,然后还想询问
1.p1,p4两点是两圆的相切点么,根据程序的计算不是啊,那tan相切是怎么使用的。就是说使用tan时不用自己求出切点么,随便一点都可以么
2. (list en2 (polar cen2 ang (* -1 r2)))  他是用list的形式来确定要剪切的那部分是么,其实就是选中了en2切线包围的部分
有点啰嗦,希望你能谅解
发表于 2013-11-14 09:20 | 显示全部楼层
影带走流年 发表于 2013-11-14 09:04
首先谢谢您啦,然后还想询问
1.p1,p4两点是两圆的相切点么,根据程序的计算不是啊,那tan相切是怎么使用 ...

1.程序中只根据两个圆心坐标算出了圆上的某几个点P1~P4,这些点只是在切点附近的点,并不是切点,计算切点还需要通过圆的半径差值,比较复杂,所以,程序中使用了切点捕捉这种变通的方法。
你不妨将这些tan从程序中去掉,看看画出的是什么样的图案。
2.trim命令中通过选择线条并同时拾取一个点的模式来判别所选的是线条的哪一段,这个拾取模式就是函数entsel的返回值式样,而程序中先得到en2这个实体,只有附着一个点,才是trim需要的格式,这里的list就是这种用途,后面的polar就是返回那个点。
 楼主| 发表于 2013-11-14 09:30 | 显示全部楼层
ll_j 发表于 2013-11-14 09:20
1.程序中只根据两个圆心坐标算出了圆上的某几个点P1~P4,这些点只是在切点附近的点,并不是切点,计算切 ...

说的好详细啊,谢谢啦

点评

你很荣幸,长老给你详细解释。  发表于 2013-11-14 13:20
 楼主| 发表于 2013-11-15 11:37 | 显示全部楼层
影带走流年 发表于 2013-11-14 09:30
说的好详细啊,谢谢啦

啊,这个这个真不知道啊,是挺荣幸的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-28 07:01 , Processed in 0.879284 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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