乐筑天下

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

[编程交流] Lisp有点像offset,但是

[复制链接]

59

主题

327

帖子

268

银币

后起之秀

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

铜币
295
发表于 2022-7-6 14:21:58 | 显示全部楼层 |阅读模式
我想有一个lisp例程,做一些看起来很简单的事情,尽管我自己无法编程。
 
这是它应该做的。
在命令ie.“draw”后,我应该能够绘制一条样条线或样条线,promt(initget pline spline)具有我需要的任意多个点。输入enter时,“定点”停止。在此之前,它都只是一条直线/样条曲线。
 
然后应提示输入第二条pline的侧面,即(initget L R)。或者提示单击与第一条线偏移的所需边,这可能更好。当给定L或R(或在侧面单击)时,应创建第二条样条线/样条线。由于第一条和第二条样条线/样条线属于不同的层和颜色,因此无法使用偏移来完成。
 
它看起来很像偏移量,所以偏移量可能会派上用场。。。?
 
这就是我到目前为止所做的(显然不起作用):
 
 
  1. ;;errorhandling when the lisp is ready, do not bother yet
  2. (defun c:draw (); make variables local when lisp ready
  3. (setq pt1 (getpoint "\nGive the first point: ")
  4. pt2 (getpoint "\nGive second point: ")
  5. pt3 (getpoint "\nGive third point: ")
  6. pt4 (getpoint "\nGive fourth point: ")
  7. ss (ssadd) ; Creating an empty selection set
  8. );end of setq

 
我怎样才能根据需要点击尽可能多的点?
现在只有4分可用-这4分必须给!!
 
进入下一步。
顺便说一句,我不喜欢“getpoint”,因为单击时该行不可见。所以我认为“getdist”会有所帮助,但后来我得到了绘制/选择点的奇怪方式。
 
  1. (command "_.pline" pt1 pt2 pt3 pt4 "")
  2. (ssadd (entlast) ss) ; Add the polyline to the selection set

 
我认为ss get比使用“last”更好。
(命令“offset”50 ss)这可以工作,但我不想使用
我想在其他层上创建一条新线的偏移函数。
选择第二条pline应出现的边
 
  1. (initget "L R")
  2. (setq side (getkword "\nSecond line left or right of first line?
  3. (L/R) <R>: "))

 
当与R相同时,只能给出L或R
 
  1. (cond
  2. ((= side "L")
  3. (then do this)
  4. ;; when given R or <Enter>
  5. ;; ------------
  6. (t
  7. (do this
  8. )
  9. (princ)
  10. );end of defun

 
如何把这一切放在一起?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 14:29:14 | 显示全部楼层
你做了很好的尝试,马可,你有一些好主意。做得好。
 
以下是我的做法,请阅读评论:
 
  1. [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] c:draw [b][color=RED]([/color][/b][b][color=BLUE]/[/color][/b] *error* vl ov tmp cEnt pt[color=black] dEnt[/color][color=black] dObj[/color][b][color=RED])[/color][/b]
  2. [i][color=#990099];; Define Function and Localise Variables[/color][/i]
  3. [i][color=#990099];; Don't localise Curv:def, as it remains Global.[/color][/i]
  4. [b][color=RED]([/color][/b][b][color=BLUE]vl-load-com[/color][/b][b][color=RED])[/color][/b]
  5. [i][color=#990099];; Load Visual LISP functions - for use later.[/color][/i]
  6. [i][color=#990099];; I find it easier to change object properties[/color][/i]
  7. [i][color=#990099];; using Visual LISP - it can be done in many ways,[/color][/i]
  8. [i][color=#990099];; but this is just my preference.[/color][/i]
  9. [b][color=RED]([/color][/b][b][color=BLUE]or[/color][/b] Curv:def [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] Curv:def [b][color=#ff00ff]"Spline"[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  10. [i][color=#990099];; First time default, as Curv:def will be nil otherwise.[/color][/i]
  11. [i][color=#990099];; Error Handler - as we are tampering with Sys Vars[/color][/i]
  12. [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] *error* [b][color=RED]([/color][/b]msg[b][color=RED])[/color][/b]
  13.    [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] ov [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]setvar[/color][/b] vl ov[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [i][color=#990099]; Reset Sys Vars[/color][/i]
  14.    [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]not[/color][/b]
  15.          [b][color=RED]([/color][/b][b][color=BLUE]wcmatch[/color][/b]
  16.            [b][color=RED]([/color][/b][b][color=BLUE]strcase[/color][/b] msg[b][color=RED])[/color][/b] [b][color=#ff00ff]"*BREAK,*CANCEL*,*EXIT*"[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  17.      [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]strcat[/color][/b] [b][color=#ff00ff]"\n<< Error: "[/color][/b] msg [b][color=#ff00ff]" >>"[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  18.    [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  19. [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] vl [b][color=DARKRED]'[/color][/b][b][color=RED]([/color][/b][b][color=#ff00ff]"CMDECHO"[/color][/b] [b][color=#ff00ff]"OSMODE"[/color][/b][b][color=RED])[/color][/b] [i][color=#990099]; Define a list of Sys Vars[/color][/i]
  20.        ov [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]getvar[/color][/b] vl[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [i][color=#990099]; Retrieve their Settings[/color][/i]
  21. [b][color=RED]([/color][/b][b][color=BLUE]initget[/color][/b] [b][color=#ff00ff]"Spline Pline"[/color][/b][b][color=RED])[/color][/b]
  22. [b][color=RED]([/color][/b][b][color=BLUE]or[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]not[/color][/b]
  23.        [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] tmp
  24.          [b][color=RED]([/color][/b][b][color=BLUE]getkword[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]strcat[/color][/b] [b][color=#ff00ff]"\nSpline or Pline? <"[/color][/b] Curv:def [b][color=#ff00ff]">: "[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  25.      [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] Curv:def tmp[b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  26. [i][color=#990099];; Either the user has hit Enter, in which case we don't need to[/color][/i]
  27. [i][color=#990099];; change the value of Curv:def, else, the user has typed something[/color][/i]
  28. [i][color=#990099];; other than that of Curv:def, so we set it as the new default.[/color][/i]
  29. [b][color=RED]([/color][/b][b][color=BLUE]command[/color][/b]
  30.    [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] Curv:def [b][color=#ff00ff]"Spline"[/color][/b][b][color=RED])[/color][/b] [b][color=#ff00ff]"_.Spline"[/color][/b] [b][color=#ff00ff]"_.Pline"[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [i][color=#990099]; Invoke Command[/color][/i]
  31. [b][color=RED]([/color][/b][b][color=BLUE]while[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]>[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]getvar[/color][/b] [b][color=#ff00ff]"CMDACTIVE"[/color][/b][b][color=RED])[/color][/b] [b][color=#009900]0[/color][/b][b][color=RED])[/color][/b] [i][color=#990099]; Whilst the Command is active[/color][/i]
  32.    [b][color=RED]([/color][/b][b][color=BLUE]command[/color][/b] pause[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [i][color=#990099]; pause for user input[/color][/i]
  33. [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] cEnt [b][color=RED]([/color][/b][b][color=BLUE]entlast[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [i][color=#990099]; Retrieve newly created Curve[/color][/i]
  34. [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] pt [b][color=RED]([/color][/b][b][color=BLUE]getpoint[/color][/b] [b][color=#ff00ff]"\nSelect Side of Curve to Offset: "[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  35.    [i][color=#990099]; If the user selects a point to offset[/color][/i]
  36.    
  37.    [b][color=RED]([/color][/b][b][color=BLUE]progn[/color][/b] [i][color=#990099]; Wrap the following[/color][/i]
  38.      [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]setvar[/color][/b] vl [b][color=DARKRED]'[/color][/b][b][color=RED]([/color][/b][b][color=#009900]0[/color][/b] [b][color=#009900]0[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  39.      [i][color=#990099];; Turn off OSMODE, as we don't want it to affect the Offset.[/color][/i]
  40.      [i][color=#990099];; Turn off CMDECHO, as we don't want to see the returns of[/color][/i]
  41.      [i][color=#990099];; the offset at the command line.[/color][/i]
  42.      [b][color=RED]([/color][/b][b][color=BLUE]command[/color][/b] [b][color=#ff00ff]"_.offset"[/color][/b] [b][color=#009900]50[/color][/b] cEnt pt [b][color=#ff00ff]""[/color][/b][b][color=RED])[/color][/b]
  43.      [i][color=#990099];; Perform Offset[/color][/i]
  44.      [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] dEnt [b][color=RED]([/color][/b][b][color=BLUE]entlast[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  45.      [i][color=#990099];; Collect Offset Object[/color][/i]
  46.      [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] dObj [b][color=RED]([/color][/b][b][color=BLUE]vlax-ename->vla-object[/color][/b] dEnt[b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  47.      [i][color=#990099];; Convert it to a VLA-OBJECT[/color][/i]
  48.      [b][color=RED]([/color][/b][b][color=BLUE]vla-put-layer[/color][/b] dObj [b][color=#ff00ff]"0"[/color][/b][b][color=RED])[/color][/b] [i][color=#990099]; <<---- Change this to your layer[/color][/i]
  49.      [i][color=#990099];; Set Object Layer[/color][/i]
  50.    [b][color=RED])[/color][/b] [i][color=#990099]; End Progn[/color][/i]
  51.    
  52. [b][color=RED])[/color][/b] [i][color=#990099]; End IF[/color][/i]
  53. [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]setvar[/color][/b] vl ov[b][color=RED])[/color][/b] [i][color=#990099]; Reset Sys Vars[/color][/i]
  54. [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b][b][color=RED])[/color][/b]
  55. [b][color=RED])[/color][/b] [i][color=#990099]; End Draw[/color][/i]
  56.      

 
更改偏移对象的图层。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 14:32:28 | 显示全部楼层
李,
 
这是惊人的,再次你如何修复它。我已经打印出了在家学习的日程安排。再次谢谢你,你的房子里一定满是谢谢你的。。。
 
在我阅读之前,我想问你,如果我礼貌地问你,你是否愿意加强它。
 
有几件事可以让它更适合我使用。但在讨论这个问题之前,你会尝试修复它吗?
 
其中一件事就是将柱脚的角按一定半径圆角。
 
干杯,伙计。
回复

使用道具 举报

59

主题

327

帖子

268

银币

后起之秀

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

铜币
295
发表于 2022-7-6 14:40:01 | 显示全部楼层
我很乐意帮助您以任何方式更改LISP,只要您从中学习。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 14:43:38 | 显示全部楼层
2009年5月29日
 
 
f3!
回复

使用道具 举报

12

主题

395

帖子

384

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-6 14:49:59 | 显示全部楼层
 
.... *总部*
回复

使用道具 举报

20

主题

344

帖子

325

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 14:54:40 | 显示全部楼层
 
我知道,我知道,但我想让马可从Lisp程序中学习,所以我想让Lisp程序接近他已经掌握的东西。。。
 
顺便说一句,f3?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 14:57:06 | 显示全部楼层
 
哈哈,这是为了打开和关闭你的osnap。。。“哦,快照”
回复

使用道具 举报

12

主题

395

帖子

384

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-6 15:03:45 | 显示全部楼层
以防万一它在英国不流行
 
“哦,snap”是比兹·马基(Biz Markie)在模仿说唱歌曲《只是一个朋友》(Just a Friend)中使用的一句台词。它有点像俚语,用于侮辱或惊讶之后。”
 
http://wiki.ytmnd.com/Oh_Snap!
回复

使用道具 举报

12

主题

395

帖子

384

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-6 15:08:09 | 显示全部楼层
哈哈哈:哈哈:
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-5 03:20 , Processed in 1.153728 second(s), 72 queries .

© 2020-2025 乐筑天下

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