明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 749|回复: 9

[源码] 你说我容易么(获取圆心不容易)?

  [复制链接]
发表于 2022-4-14 11:05 | 显示全部楼层 |阅读模式
本帖最后由 自贡黄明儒 于 2022-4-14 11:49 编辑

PCCAD V21的(osnap p "CEN")不起任何作用,与2K相比还有不少差距(但是此国产软件便宜,作为上市公司推行正版),于是只能计算圆心。以往发过计算圆心的函数,希望这个更成熟。
  1. ;;[获取圆心]无圆心返回nil
  2. (defun HH:GetCenter2 (curve P / EP PARAM PP SP)
  3.   (setq pp (vlax-curve-getclosestpointto curve (trans p 1 0)))
  4.   (setq Param (vlax-curve-GetParamAtPoint curve PP))
  5.   (if (equal (vlax-curve-getsecondderiv curve Param)
  6.              '(0.0 0.0 0.0)
  7.       );直线
  8.     nil
  9.     (progn
  10.       (if (<= (- Param 0.0001) (vlax-curve-GetStartParam curve))
  11.         (progn
  12.           (setq Param (+ Param 0.0001))
  13.           (setq pp (vlax-curve-GetPointAtParam curve Param))
  14.         )
  15.       )
  16.       (if (>= (+ Param 0.0001) (vlax-curve-GetEndParam curve))
  17.         (progn
  18.           (setq Param (- Param 0.0001))
  19.           (setq pp (vlax-curve-GetPointAtParam curve Param))
  20.         )
  21.       )
  22.       (setq sp (vlax-curve-getPointAtParam curve (- Param 0.0001)))
  23.       (setq Ep (vlax-curve-getPointAtParam curve (+ Param 0.0001)))
  24.       (if (wcmatch (getvar "AcadVer") "*BricsCAD*") ; PCCAD
  25.         (mapcar '+ pp (vlax-curve-getsecondderiv curve Param))
  26.         (if
  27.           (minusp (car (trans (mapcar '- pp Ep) 0 (mapcar '- Ep sp)))) ;顺时针为T
  28.            (mapcar '+ pp (vlax-curve-getsecondderiv curve Param))
  29.            (mapcar '- pp (vlax-curve-getsecondderiv curve Param))
  30.         )
  31.       )
  32.     )
  33.   )
  34. )

本帖子中包含更多资源

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

x

评分

参与人数 1明经币 +1 收起 理由
表骑马实开车 + 1 很给力!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2022-5-2 11:08 | 显示全部楼层
本帖最后由 自贡黄明儒 于 2022-5-2 11:14 编辑
表骑马实开车 发表于 2022-4-30 19:01
大佬,我测试了你的这两个获得圆心的函数,包括我曾经试过lee mac的获得圆心的函数 ,似乎都存在反向的 ...

(210 0.0 0.0 1.0)
回复 支持 1 反对 0

使用道具 举报

发表于 2022-4-15 09:48 | 显示全部楼层
噗。瞧把孩子逼成什么样了
发表于 2022-4-15 16:28 | 显示全部楼层
成功后,回过头来想想,就容易了
发表于 2022-4-15 16:44 | 显示全部楼层
什么是PCCAD?是在 BricsCAD上的二次开发程序吧?
 楼主| 发表于 2022-4-15 20:56 来自手机 | 显示全部楼层
清华天河,国产,便宜。
发表于 2022-4-30 19:01 | 显示全部楼层
本帖最后由 表骑马实开车 于 2022-5-2 14:49 编辑


大佬,我测试了你的这两个获得圆心的函数,包括我曾经试过lee mac的获得圆心的函数 ,似乎都存在反向的圆心问题? 这是什么原因?

本帖子中包含更多资源

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

x
发表于 2022-5-2 13:04 来自手机 | 显示全部楼层
自贡黄明儒 发表于 2022-5-2 11:08
(210 0.0 0.0 1.0)

大佬,可以解释清楚一点吗?其实新手看不懂

点评

检查组码210  发表于 2022-5-2 13:19
发表于 2022-5-2 14:37 | 显示全部楼层
本帖最后由 表骑马实开车 于 2022-5-2 15:59 编辑

表骑马实开车 发表于 2022-5-2 13:04
大佬,可以解释清楚一点吗?其实新手看不懂
  1. (vl-load-com)
  2. (defun c:HH:GetCenter3 (/ CENLIST EP FLAG MDERIV MP PARAM SP)
  3.   (setq curve (car (entsel)))
  4.   (setq param (fix (vlax-curve-getEndParam curve)))
  5.   (setq sp (vlax-curve-getPointAtParam curve param))
  6.   (repeat param
  7.     (setq param (1- param))
  8.     (setq Ep (vlax-curve-getPointAtParam curve param))
  9.     (setq Mp (vlax-curve-getPointAtParam curve (+ param 0.5))) ;中点
  10.     (setq Mderiv (vlax-curve-getsecondderiv curve (+ param 0.5)));中点法线
  11.     (setq Flag (car (trans (mapcar '- Mp Ep) 0 (mapcar '- Ep sp))))
  12.     (cond ((equal Flag 0) nil)
  13.     ((and  (minusp Flag)
  14.     (not (minusp (last (assoc 210 (entget curve)))))
  15.      )
  16.      (setq CenList (cons (mapcar '- Mp Mderiv) CenList))
  17.     )
  18.     (T
  19.      (setq CenList (cons (mapcar '+ Mp Mderiv) CenList))
  20.     )
  21.     )
  22.     (setq sp Ep)
  23.   )
  24.   CenList
  25.   (command "circle" (car CenList) 60)
  26. )




我这样改的话似乎可以了,请问会不会存在逻辑问题?

(and (minusp Flag)
     (not (minusp (last (assoc 210 (entget curve)))))
)

评分

参与人数 1明经币 +1 收起 理由
自贡黄明儒 + 1 赞一个!

查看全部评分

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

本版积分规则

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

GMT+8, 2024-3-29 23:11 , Processed in 0.295365 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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