影带走流年 发表于 2013-11-13 20:48:52

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

图片是效果图,下面的是代码。简单说明一下:选取两圆做内公切线,并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)
)


ljpnb 发表于 2013-11-13 20:55:56

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:27

ljpnb 发表于 2013-11-13 20:55 static/image/common/back.gif
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切线包围的部分
有点啰嗦,希望你能谅解

ll_j 发表于 2013-11-14 09:20:34

影带走流年 发表于 2013-11-14 09:04 static/image/common/back.gif
首先谢谢您啦,然后还想询问
1.p1,p4两点是两圆的相切点么,根据程序的计算不是啊,那tan相切是怎么使用 ...

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

影带走流年 发表于 2013-11-14 09:30:55

ll_j 发表于 2013-11-14 09:20 static/image/common/back.gif
1.程序中只根据两个圆心坐标算出了圆上的某几个点P1~P4,这些点只是在切点附近的点,并不是切点,计算切 ...

说的好详细啊,谢谢啦

影带走流年 发表于 2013-11-15 11:37:01

影带走流年 发表于 2013-11-14 09:30 static/image/common/back.gif
说的好详细啊,谢谢啦

啊,这个这个真不知道啊,是挺荣幸的。
页: [1]
查看完整版本: 代码有些不明白,希望大神帮忙解释一下