chpmould 发表于 2011-4-23 15:59:41

将椭圆弧转成圆弧

本帖最后由 chpmould 于 2011-4-23 17:20 编辑

请教:
      LISP如何将以下CAD档案中的椭圆弧转成圆弧...或提供一个思路也可。。。

ZZXXQQ 发表于 2011-4-23 21:09:20

本帖最后由 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)
)

qazxswk 发表于 2022-3-16 17:29:59

ZZXXQQ 发表于 2011-4-27 22:08


对,命令没有反应。

tanjurun 发表于 2021-1-19 08:48:59

始终还是有偏差,改进下就好了

Andyhon 发表于 2011-4-23 17:23:32

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:50:01

本帖最后由 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. ...

谢谢,我测试了那个例子,发现那个椭圆弧如果方向不对的时候会跑位,需要如何处理到不分方向...

Andyhon 发表于 2011-4-23 21:07:47

另有一种法子就是降存至 R12 前的格式

461045462 发表于 2011-4-23 22:34:56

回复 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))
望指教
谢谢

chpmould 发表于 2011-4-23 22:57:33

ZZXXQQ 发表于 2011-4-23 21:09 static/image/common/back.gif
我是这样转的,但有些误差。


我测试了一下,有的可以,但有得法提示: 参数类型错误: numberp: nil

461045462 发表于 2011-4-24 07:13:31

请问我用ELLIPSE做椭圆弧,第一次命令后显示:指定椭圆的轴端点或 [圆弧(A)/中心点(C)];选择A,可以做椭圆弧;第二次运行命令,则只显示:
命令: ELLIPSE
指定椭圆弧的轴端点或 [中心点(C)]:
没有 [圆弧(A)/....],不知是为什么?
望指教
谢谢

chpmould 发表于 2011-4-24 17:37:13

本帖最后由 chpmould 于 2011-4-24 17:37 编辑

楼上的朋友们,能否帮助完善一下上面的问题点啊...

ZZXXQQ 发表于 2011-4-24 20:07:55

5楼已改。再试试。
页: [1] 2 3
查看完整版本: 将椭圆弧转成圆弧