将椭圆弧转成圆弧
本帖最后由 chpmould 于 2011-4-23 17:20 编辑请教:
LISP如何将以下CAD档案中的椭圆弧转成圆弧...或提供一个思路也可。。。
本帖最后由 ZZXXQQ 于 2011-4-24 20:06 编辑
我是这样转的,但有些误差。
(defun c:tt ()
(setvar "CMDECHO" 0)
(setq oldos (getvar "OSMODE"))
(setvar "OSMODE" 0)
(if (setq ss (ssget '((0 . "ELLIPSE")))) (progn
(setq i 0)
(setq AL1 (/ pi 2))
(SETVAR "PELLIPSE" 1)
(repeat (sslength ss)
(setq LC (entget(ssname ss i)))
(setq LPRO (cdr (assoc 41 LC))
X1 (cadr (assoc 10 LC))X2 (+ X1 (cadr (assoc 11 LC)))
Y1 (caddr (assoc 10 LC)) Y2 (+ Y1 (caddr (assoc 11 LC)))
PT1 (list X1 Y1) PT2 (list X2 Y2)DISX (DISTANCE PT1 PT2)
XYDIS (* (cdr (assoc 40 LC)) DISX))
(if (= LPRO 0)
(COMMAND "ERASE" SN "" "ELLIPSE" "C" PT1 PT2 XYDIS)
(progn
(setq ANG (ANGLE PT1 PT2) ANN (cdr (assoc 42 LC))
PSX (* (cos LPRO) DISX) PSY (* (sin LPRO) XYDIS)
PEX (* (cos ANN) DISX)PEY (* (sin ANN) XYDIS)
PX1 (- (* (cos ANG) PSX) (* (sin ANG) PSY))
PY1 (+ (* (sin ANG) PSX) (* (cos ANG) PSY))
PX2 (- (* (cos ANG) PEX) (* (sin ANG) PEY))
PY2 (+ (* (sin ANG) PEX) (* (cos ANG) PEY))
PT3 (list (+ X1 PX1) (+ Y1 PY1))
PT4 (list (+ X1 PX2) (+ Y1 PY2))
AA (ANGLE PT3 PT4) A2 (+ AA AL1)
PT6 (POLAR PT4 AA 0.05) PT5 (POLAR PT3 (+ AA PI) 0.05)
PT7 (POLAR PT5 A2 0.05) PT8 (POLAR PT6 A2 0.05)
ANGCUT (- LPRO ANN) ANGCUT (if (< ANGCUT 0) (+ ANGCUT PI PI) ANGCUT)
)
(COMMAND "ERASE" SN "" "ELLIPSE" "C" PT1 PT2 XYDIS)
(if (< ANGCUT AL1)
(COMMAND "BREAK" PT4 "F" PT4 PT3)
(COMMAND "LINE" PT5 PT6 "" "TRIM" "L" "" "F" PT7 PT8 "" "" "ERASE" "P" "")
)
))
(setq i (1+ i))
)
(SETVAR "PELLIPSE" 0)
))
(setvar "OSMODE" oldos)
(setvar "CMDECHO" 1)
(princ)
)
ZZXXQQ 发表于 2011-4-27 22:08
对,命令没有反应。 始终还是有偏差,改进下就好了 Visit site:
http://www.cadtutor.net/forum/archive/index.php/t-32634.html
http://tech.groups.yahoo.com/group/adesu_cad/message/115 本帖最后由 chpmould 于 2011-4-23 17:59 编辑
Andyhon 发表于 2011-4-23 17:23 http://bbs.mjtd.com/static/image/common/back.gif
Visit site:
http://www.cadtutor.net/forum/archive/index.php/t-32634.html
http://tech.groups.yahoo. ...
谢谢,我测试了那个例子,发现那个椭圆弧如果方向不对的时候会跑位,需要如何处理到不分方向...
另有一种法子就是降存至 R12 前的格式 回复 ZZXXQQ 的帖子
试了试,有时可以转圆,有些提示有误:
选择对象: 指定对角点: 找到 1 个
选择对象:; 错误: 参数类型错误: numberp: nil
不知是为什么?
选择对象: ((-1 . <图元名: 7e9faf60>) (0 . "ELLIPSE") (330 . <图元名: 7e9facf8>)
(5 . "B4") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "Moldbase") (62 .
7) (100 . "AcDbEllipse") (10 232.763 170.788 0.0) (11 3.01146 0.0 0.0) (210 0.0
0.0 -1.0) (40 . 0.996195) (41 . 0.0) (42 . 1.5708))
望指教
谢谢 ZZXXQQ 发表于 2011-4-23 21:09 static/image/common/back.gif
我是这样转的,但有些误差。
我测试了一下,有的可以,但有得法提示: 参数类型错误: numberp: nil 请问我用ELLIPSE做椭圆弧,第一次命令后显示:指定椭圆的轴端点或 [圆弧(A)/中心点(C)];选择A,可以做椭圆弧;第二次运行命令,则只显示:
命令: ELLIPSE
指定椭圆弧的轴端点或 [中心点(C)]:
没有 [圆弧(A)/....],不知是为什么?
望指教
谢谢 本帖最后由 chpmould 于 2011-4-24 17:37 编辑
楼上的朋友们,能否帮助完善一下上面的问题点啊... 5楼已改。再试试。