找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1298|回复: 9

[求助] [求助]:如何用LISP确定多义线中圆弧所在的位置

[复制链接]
发表于 2004-12-15 17:01:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
请教各位:
    1.如何用LISP判断多义线中存在圆弧段?
    2.又如何用LISP确定圆弧所在的位置?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 488个

财富等级: 日进斗金

发表于 2004-12-15 22:11:14 | 显示全部楼层
1: dxf 42 /= 0
2:论坛找找,最不用动脑筋的是先explode,取了信息,再undo
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-15 22:43:32 | 显示全部楼层
用下面这个判断圆弧,再找圆心
(setq ent (car (entsel"\n请选择一个圆弧:")))
    (setq eg (entget ent))
    (if (= (cdr (assoc 0 eg)) "ARC")   
    (setq r (cdr (assoc 40 eg)))
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-15 23:32:06 | 显示全部楼层
[php]
;;标注PLINE中的圆心位置
(defun c:test (/ ss1 s1 ss2 ss3 n s2 e pt1)
  (command "_undo" "be")
  (setq ss1 (ssget "X"))
  (setq s1 (entsel))
  (command "explode" s1)
  (setq ss2 (ssget "X"))
  (command "select" ss2 "r" ss1 "")
  (setq ss3 (ssget "p"))
  (setq sl (entlast))
  (setq        n  -1
        ll 300
  )
  (while (setq s2 (ssname ss3 (setq n (+ 1 n))))
    (setq e (dxf 0 (entget s2)))
    (if        (= e "ARC")
      (progn
        (setq pt1 (dxf 10 (entget s2)))
        (command "line" (POLAR PT1 0 ll) (POLAR PT1 PI ll) "")
        (command "line"
                 (POLAR PT1 (/ PI 2) ll)
                 (POLAR PT1 (* PI 1.5) ll)
                 ""
        )
      )
    )
  )
  (command "pedit" sl "Y" "j" ss3 "" "")
  (command "_undo" "e")
  (princ "\n共标注")
  (princ n)
  (princ "个圆弧!")
  (princ)
)
(defun dxf (code elist) (cdr (assoc code elist)))
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-16 09:57:01 | 显示全部楼层
实际上楼主的问题可以合并为一个问题解决;
即用ENTGET获得实体数据后,用以下代码可获取点及该点处的弓弦比(DXF组码42)
            (setq dla (member '(100 . "AcDbPolyline") dl)
                  na1 (cdr (assoc 90 dla));;--------------------------------取出控制点数量
                  ptp (Cdr (Assoc 70 dla));;--------------------------------取出结束片段类型
            );;setq
            (setq n1 6 ;;---------------------------------------------------资料读取序号初值
                  ptdl '() ;;-----------------------------------------------自建的点位资料表
            );;setq
            (repeat na1
                    (setq pt (cdr (nth n1 dla));;---------------------------取出控制点点位
                          pa (cdr (nth (+ 3 n1) dla));;---------------------取出弓弦比
                        ptdl (cons (list pt pa) ptdl);;---------------------将资料加到ptdl表中
                    );;setq
                    (setq n1 (+ 4 n1))
            );;repeat
有了弓弦比就可以判断是否下一段是弧段,当然也就知道位置了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-16 12:21:40 | 显示全部楼层
;;当然也就知道位置了,下列圓心位置呢!
(entmake '((0 . "LWPOLYLINE")
           (100 . "AcDbEntity")
           (67 . 0)
           (410 . "Model")
           (8 . "0")
           (100 . "AcDbPolyline")
           (90 . 5)
           (70 . 0)
           (43 . 0.0)
           (38 . 153.021)
           (39 . 0.0)
           (10 147.746 142.022)
           (40 . 0.0)
           (41 . 0.0)
           (42 . -0.364192)
           (10 86.8448 69.5002)
           (40 . 0.0)
           (41 . 0.0)
           (42 . 0.877484)
           (10 89.8647 -3.39776e-014)
           (40 . 0.0)
           (41 . 0.0)
           (42 . -0.398576)
           (10 145.23 -62.4494)
           (40 . 0.0)
           (41 . 0.0)
           (42 . 0.443242)
           (10 176.939 -93.1705)
           (40 . 0.0)
           (41 . 0.0)
           (42 . -1.06706)
           (210 1.0 0.0 2.22045e-016)
          )
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-16 21:18:53 | 显示全部楼层
楼上各位,你又怎么能知道我选取的是哪一段弧呢?
恐怕就不那么简单了吧?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-16 21:44:04 | 显示全部楼层
如果你自己知道,那就使用“cen”捕捉模式。
如果你自己也不知道,那就谁也不知道了。呵呵……
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-17 19:22:57 | 显示全部楼层
老兄既然知道OSNAP,4楼的程序又何必那么大费周章呢?我们讨论的是通用的方法。知道圆心又如何,如果有几段弧共一个圆心怎么办?(特殊情况是PL圆)或者不是圆弧段,直线段呢?用(OSNAP  SELECTPT “NEAR”)可以捕捉到线上一点,再分析这个点到底位于那一段上,要做到通用是很麻烦的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-17 23:46:59 | 显示全部楼层
给个图片看看,找出圆弧又标出其圆心位置,还有啥子问题?
再不行就画出圆弧起点、终点与圆心的连线,总会知道其位置了吧。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-27 17:33 , Processed in 0.327905 second(s), 51 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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