在线咨询 切换到宽版
eetop公众号 创芯大讲堂 创芯人才网

 找回密码
 注册

手机号码,快捷登录

手机号码,快捷登录

搜帖子
查看: 464|回复: 5

[求助] 求一个可以画正多边形的skill脚本

[复制链接]
发表于 2025-8-11 13:28:23 | 显示全部楼层 |阅读模式
悬赏50资产已解决

最佳答案

查看完整内容

(defun drawRegPolygon (n side layer @optional cx cy) (let (pi R startAngle pts i theta x y cv layerList denom angleStep) (if (or (null n) (lessp n 3)) (error "drawRegPolygon: n must be >= 3") ) (if (or (null side) (lessp side 0.0000001)) (error "drawRegPolygon: side must be > 0") ) (setq pi (acos -1.0)) (if (null cx) (setq cx 0.0)) (if (n ...
发表于 2025-8-11 13:28:24 | 显示全部楼层
(defun drawRegPolygon (n side layer @optional cx cy)
  (let (pi R startAngle pts i theta x y cv layerList denom angleStep)

   
    (if (or (null n) (lessp n 3))
      (error "drawRegPolygon: n must be >= 3")
    )

   
    (if (or (null side) (lessp side 0.0000001))
      (error "drawRegPolygon: side must be > 0")
    )

   
    (setq pi (acos -1.0))
    (if (null cx) (setq cx 0.0))
    (if (null cy) (setq cy 0.0))

   
    (if (listp layer)
      (setq layerList layer)
      (setq layerList (list layer "drawing"))
    )

     R = side / (2*sin(pi/n))
    (setq denom (sin (quotient pi n)))
    (setq denom (times 2.0 denom))
    (setq R (quotient side denom))

    (setq startAngle (quotient pi n))
    (setq angleStep (quotient (times 2.0 pi) n))
    (setq pts nil)
    (setq i 0)

   
    (while (lessp i n)
      (setq theta (plus startAngle (times i angleStep)))
      (setq x (plus cx (times R (cos theta))))
      (setq y (plus cy (times R (sin theta))))
      (setq pts (append pts (list (list x y))))
      (setq i (plus i 1))
    )

   
    (setq cv (geGetEditCellView))
    (if (null cv)
      (error "drawRegPolygon: no edit cellview found")
    )

   
    (dbCreatePolygon cv layerList pts)
  )
)

;(drawRegPolygon 10 10.0 (list "M1" "drawing") 0 0)
边数 边长 使用layer 图形中心点
回复

使用道具 举报

发表于 2025-8-11 14:05:29 | 显示全部楼层
本帖最后由 23345 于 2025-8-11 14:11 编辑

create——shape——circle——F3(shape type选择半圆;conic sides填正多边形总边数的一半数值;radius设置正多边形半径)——把图形画在layout上——复制合并。
这个也可以画正多边形
回复

使用道具 举报

 楼主| 发表于 2025-8-11 14:29:33 | 显示全部楼层


   
23345 发表于 2025-8-11 14:05
create——shape——circle——F3(shape type选择半圆;conic sides填正多边形总边数的一半数值;radius设 ...


确实可以
回复

使用道具 举报

发表于 2025-8-11 15:20:28 来自手机 | 显示全部楼层
let(((cv pcPcellView)
r  f)
Rs=r
pi=3.1415926
bian2=f*2
step0=0
stepTotal=fix(bian2/2)
stepstepPerRing=stepTotal
initA=0
deltaA=360/stepstepPerRing
whilewhile(STEP0<=stepTotal
let((rad x1 y1 o1)
rad=pi*(initA+deltaA*step0)/180
innerR=Rs
x1=cos(rad)*innerR
y1=sin(rad)*innerR
o1=x1:y1
points1=cons(o1 points1)
)
step0++
)
A1=rodCreatePolygon(
?cvId      cv
?layer     "M1"
?pts        points1)
)

以上内容加到通用pcell模板中即可
以下两个值自己设置
f是边数
r是外接圆半径
回复

使用道具 举报

发表于 2025-8-12 07:05:33 | 显示全部楼层
procedure(CreateNPolygon(n l)
prog(()
cv=geGetEditCellView()
ang=2*3.1415926/n
points=nil
for(i 0 n-1
x=l*cos(ang*i)
y=l*sin(ang*i)
points=append(points list(x:y))
        )
dbCreatePolygon( cv leGetEntryLayer() points)
) ; end prog
) ; end proc
使用当前的layer,在当前的layout上创建
回复

使用道具 举报

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

本版积分规则

关闭

站长推荐 上一条 /1 下一条

X

手机版| 小黑屋| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-9-1 00:22 , Processed in 0.013729 second(s), 4 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表