乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 90|回复: 16

[编程交流] LISP中的圆角多段线

[复制链接]

11

主题

40

帖子

29

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
55
发表于 2022-7-5 22:13:45 | 显示全部楼层 |阅读模式
我在LISP中创建了一条多段线,并希望添加到程序中,这样它将自动对该多段线进行圆角,而无需要求用户单击他们想要的多段线。我知道你可以使用ssget,让它获得最后一个物体或类似的东西。我知道只要单击多段线,圆角就会击中多段线上的每个角。不过我不知道怎么做。我看了看帮助,它并没有为我澄清。我在页面上有一些折线,所以全选不起作用。欢迎任何想法。
回复

使用道具 举报

5

主题

194

帖子

193

银币

初来乍到

Rank: 1

铜币
24
发表于 2022-7-5 22:21:03 | 显示全部楼层
你好
 
每个角的半径是恒定的吗?是否每个角落都需要圆角?
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-5 22:21:59 | 显示全部楼层
你真的应该发布你的代码,以消除所有的困惑。
 
那么,您想要绘制一条LWPolyline,并用指定的半径对每个顶点进行圆角,还是想要用其他对象对绘制的LWPolyline进行圆角?
回复

使用道具 举报

11

主题

40

帖子

29

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
55
发表于 2022-7-5 22:25:35 | 显示全部楼层
我有一个很长的代码。然而,我所需要的是一种方法来圆角一个多段线,我已经创建了使用LISP。所有角将有一个0.03圆角。下面是代码以供查看。你必须创建两层“x-laser”板,否则什么都不会发生。它将一块切到右侧,这是一个壁挂式,只有外部的多段线和两个内部框将被圆角。箱板90.LSP
231349uhy8m94onzoholsw.jpg
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-5 22:31:29 | 显示全部楼层
在这里,我把它作为一个例子,所以你们可以从中学习suite。
 
  1. (defun c:PF (/ pt eLast ent)
  2. ;; Alan J. Thompson, 07.21.10
  3. (setvar 'filletrad
  4.          (cond ((getdist (strcat "\nSpecify fillet radius <" (rtos (getvar 'filletrad)) ">: ")))
  5.                ((getvar 'filletrad))
  6.          )
  7. )
  8. (if (setq pt (getpoint "\nSpecify start point: "))
  9.    (progn
  10.      (setq eLast (entlast))
  11.      (command "_.pline" "_non" pt)
  12.      (while (= 1 (logand (getvar 'cmdactive) 1))
  13.        (princ "\nSpecify next point: ")
  14.        (command PAUSE)
  15.      )
  16.      (or (equal eLast (setq ent (entlast)))
  17.          (command "_.fillet" "_P" ent)
  18.      )
  19.    )
  20. )
  21. (princ)
  22. )

 
回复

使用道具 举报

5

主题

194

帖子

193

银币

初来乍到

Rank: 1

铜币
24
发表于 2022-7-5 22:35:40 | 显示全部楼层
  1. (setvar 'filletrad
  2.          (cond ((getdist (strcat "\nSpecify fillet radius <" (rtos (getvar 'filletrad)) ">: ")))
  3.                ((getvar 'filletrad))
  4.          )
  5. )

 
很好的编码!
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 22:38:00 | 显示全部楼层
既然一个图层不在图形中,我想你应该先创建一个图层,然后自动创建
设置为当前。
(setvar’clayer“x激光”)
(setvar‘clayer’板)
“.-层”
 
那么,要圆角的区域在哪里?
 
塔瓦特
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-5 22:40:45 | 显示全部楼层
 
很好的观点。此外,要知道,如果一个层被冻结,并且您尝试使用setvar'clayer或vla put activelayer将其设置为当前,它将崩溃。在将层设置为当前之前,请始终使用-layer并解冻该层,或在将层设置为当前之前,将冻结x:vlax false。
 
我也会查一下。
  1. (if (tblsearch "LAYER" "BLAH")
  2. thaw and set layer as current
  3. create layer
  4. )
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 22:47:26 | 显示全部楼层
 
谢谢Alanjt。
还有更多。
  1. )                                       
  2.    [color="red"](BPReset)
  3. )       
  4. (defun BPReset ()
  5.    (setvar 'plinewid plw)
  6.    (setvar 'osmode osm)
  7.    (setvar 'blipmode blipm)
  8.    (setvar 'clayer curlay)
  9.    (command "_.undo" "_end")
  10.    (setvar 'cmdecho cmde)
  11. )                                [/color]        ; end defun
  12. (setq cmde (getvar 'cmdecho))
  13. (setvar 'cmdecho 0)
  14. (command "_.undo" "_begin")
  15. (setq osm (getvar 'osmode))
  16. (setvar 'osmode 0)
  17. (setq blipm (getvar 'blipmode))
  18. (setqcurlay (getvar 'clayer)
  19.    plw           (getvar 'plinewid)

 
函数的defun必须在获得Sys Vars的值后调用,只是为了让defun获得每个SETVAR的值。
如果你想先关闭特定的Sys变量,那么你可以把它们从例程代码中去掉,只包含名称
在你最喜欢的地方。
 
当做
 
塔瓦特
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-5 22:47:50 | 显示全部楼层
你可能想解决这个问题。我也不认为把它变成一个子程序有什么意义。只需在之前保存变量,并在适当的时候重置它们。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-11 06:02 , Processed in 0.421446 second(s), 74 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表