乐筑天下

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

[编程交流] lisp需要一些修改。

[复制链接]

27

主题

146

帖子

119

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
137
发表于 2022-7-5 22:39:34 | 显示全部楼层 |阅读模式
嗨,朋友们。
这个例程需要一些修改,希望你能帮助我。谢谢
 
只能画A型,我还需要一个选项,B型
 
而且,我还需要手动输入长度,而不仅仅是选择两个点。
不需要画中心线,在例行程序中删除它。
 
  1. (defun c:ttt (/ os bo olay lay col lt e d ctk_Z aa r pt pta ang di ptb pt1 pt2 pt3 pt4 ptt b bl)
  2. (defun *Error* (msg);
  3.     (if (and msg (not (wcmatch (strcase msg) "*BREAK*,*CANCEL*,*QUIT*,*EXIT*,")))
  4.         (progn (setvar "blipmode" 0)(princ)))
  5.   );defun *Error*
  6. (setvar "cmdecho" 0)
  7. (setq os (getvar "osmode"))
  8. (setq bo (getvar "blipmode"))
  9. (setq olay (getvar "clayer"))
  10. (setvar "osmode" 1023)
  11. (princ "Long hole")
  12. (setq lay "centerline")
  13. (setq col "6")
  14. (setq lt "CENTER")
  15. (setq e (getvar 'ltscale))
  16. (setq d (/ 6 e))
  17. (if (tblsearch "layer" lay) ""
  18.      (progn
  19.        (command "-layer" "m" lay "color" col "" "l" lt "" "")
  20.        (command "clayer" olay)
  21.      )
  22. )
  23.   (if *ctk_Z*
  24.     (setq ctk_Z (getdist (strcat "\nPlease enter the diameter <" (rtos *ctk_Z* 2 4) ">:")))
  25.     (setq ctk_Z (getdist "\nPlease enter the diameter <13>:" ))
  26.   )
  27.   (if (not ctk_Z)
  28.     (setq ctk_Z *ctk_Z*)
  29.     (setq *ctk_Z* ctk_Z)
  30.   )
  31. (setq aa ctk_Z)
  32. (if (= aa nil) (setq aa (* 6.5 2)))
  33. (setq r (/ aa 2))
  34. (while
  35.    (setvar "blipmode" 0)
  36.    (setvar "osmode" 1023)
  37.    (and
  38.       (setq pt (getpoint "\nSpecifies the insertion point:"))
  39.       (setq pta  (getpoint pt "\nSpecifies the other point:"))
  40.     );and
  41.    (setq ang  (angle pt pta)
  42.       di  (distance pt pta)
  43.       ptb (polar pt ang r)
  44.       pt1 (polar ptb (+ ang (/ pi 2)) r)
  45.       pt2 (polar pt1 ang (- di (* r 2)))
  46.       pt3 (polar ptb (+ ang (/ pi -2)) r)
  47.       pt4 (polar pt3 ang (- di (* r 2)))
  48.       ptt (mapcar '(lambda(x)(/ x 2))(mapcar '+ pt pta))
  49.     );set
  50.    (setvar "osmode" 0)
  51.    (command "_.PLINE" "non" pt1 "non" pt2 "A" "non" pt4 "L" "non" pt3 "A" "CL")
  52.    (setq b (* 0.4 r))
  53.    (if (<= di 50)
  54. (setq bl d)
  55.        (setq bl (+ d (* (/ 2 e) (fix (/ di 50)))))
  56.    )
  57.    (command "line" (polar pt (+ ang pi) b) (polar pta ang b) "")
  58.    (command "change" (entlast) "" "P" "la" lay ""
  59.             "change" (entlast) "" "P" "s" bl "")
  60.    (command "line" (polar ptt (+ ang (/ pi 2)) (+ r b)) (polar ptt (- ang (/ pi 2)) (+ r b)) "")
  61.    (command "change" (entlast) "" "P" "la" lay ""
  62.             "change" (entlast) "" "P" "s" bl "")
  63.    (command "redrawall")
  64.    (princ "\n**Continue...**")
  65.    (setvar "osmode" os)
  66.    (setvar "blipmode" bo)
  67. );while
  68. (princ)
  69. );defun

 
如果你不再需要抽绳,那么
将分号放在代码的最左边
  1. (setq
  2. ang (angle pt pta)     --> ang (getangle "\nAngle: ")
  3. di (distance pt pta)  --> di (getdist "\nLength: ")
  4. ptb (polar pt ang r)   --> ptb pt

我道歉d.i.y
 
对于B型
  1. ;;;    (setq pta  (getpoint pt "\nSpecifies the other point:"))
  2. ;;;    ptt (mapcar '(lambda(x)(/ x 2))(mapcar '+ pt pta))
  3. ;;;    (command "line" (polar pt (+ ang pi) b) (polar pta ang b) "")
  4. ;;;    ... from
  5. ;;;    ...
  6. ;;;    ... to
  7. ;;;    (command "redrawall")
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 22:43:26 | 显示全部楼层
 
你好韩,这是最终版本? 我会努力的!
回复

使用道具 举报

27

主题

146

帖子

119

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
137
发表于 2022-7-5 22:46:31 | 显示全部楼层
你好韩,现在好了!非常感谢你!
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 22:52:02 | 显示全部楼层
 
韩,你好,
使用一段时间,不是很方便。输入--“O”选择“A”和“B”,很容易出错。
可以使用DCL吗? 这样地:

 
我已经制作了SLD文件:
SLD。拉链
回复

使用道具 举报

27

主题

146

帖子

119

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
137
发表于 2022-7-5 22:53:27 | 显示全部楼层
 
 
实际上,您不需要每次为“A或B”输入“选项”,您输入的“选项”值将被设置为下一个典型会话的默认值,因此您只需选择不带“选项”的点。。
  1. (setq
  2. ang  (getangle "\nAngle: ")  <---- modified
  3. di (getdist "\nLength: ") <---- modified
  4. di ( - di r)   <------------- add this
  5. ...
  6. ...

红色为默认值
和dcl一样,您只在需要更改其设置时调用它,而不是每次运行时它都会弹出,这样对用户不友好
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 22:56:28 | 显示全部楼层
 
是的,并不是每次运行它都会弹出,这样对用户来说不友好,但Dcl更直观。
回复

使用道具 举报

27

主题

146

帖子

119

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
137
发表于 2022-7-5 23:01:37 | 显示全部楼层
 
 
[code]http://www.cadtutor.net/forum/showthread.php?87818-A-lisp-need-some-modify/第2页(if(null*fb\U user*)(setq*fb\U user*(mapcar‘itoa’(1 0 1 0)));_if(defun fbdia(/radio dcl\u id path dcl)(setq radio’(“radio1”“radio2”“radioA”“radioB”)路径(getenv“temp”)(((f lst/)(setq f(open f“w”))(mapcar’($)(write line$f))lst)(close f)(setq f nil))(setq dcl(strcat path“\\tmp.dcl”)(“icon\u fbox\u img:image{”color=0“宽度=40;”“纵横比=0.75;”“allow\u accept=true;”“fixed_height=true;”“fixed_width=true;”“}”“”“fbox:对话框{”“\t标签=\”圆角框设置\“;”“键=\”dcl\U标题\“;”“”:段落{”“:text\u部分{”“\t标签=\“选择选项\”;”“\t//对齐=居中;”“}”“}”“:列{”“:行{”“:列{”“:icon\u fbox\u img{key=\”SH-center\“;}”“}”“:列{”“:icon\u fbox\u img{key=\”SH-EDGE\“;}”“}”“}”“}”“:列{fixed\u width=true;//对齐=居中;”“:box\u radio\u行{label=\“Draw method\”;”“\t:单选按钮{label=\”Pick center“;key=\”[color=“red”]radio1\“;}//值=“0”;“”:单选按钮{label=\“Pick side\”键=\“[color=”red“]radio2\”;}//值=\“1\”“}”“}”“:列{”“:行{”“:列{”“:icon\u fbox\u img{key=\“SH-P2P\”;}“}”“:列{”“:icon\u fbox\u img{key=\“SH-C2C\”;}“}”“}”“}”“”“间隔垫圈1;“”:列{fixed\u width=true;//对齐=居中;“”:装箱单选行{label=\“Mode\”;“”:单选按钮{label=\“A:边到边\”;键=\“[color=”red“]radio[”color“\”;}//值=\“0\”:单选按钮{label=\“B:radi to Radii\”;键=\“[color=”red“]radioB\”;}//值=“1”;“}”“}”“:列{fixed\u width=true;对齐=居中;”“:段落{”“:text\u part{”“\tlabel=\“圆角框:hanhphuc 2014\”;“\talignment=centered;”“}”“}”“:行{”“\t spacer\u 0;”“ok\u cancel;”“}”“)(setq dcl\u id(load\u dialog dcl))(new\u dialog”fbox“dcl\U id”(mapcar“”((a)((i sld)(setq x(dimx\U tile i))(setq y(dimy\U tile i))(start\U image i)(fill\U image 0 0 x y-2)(slide\U image 0 x y sld)(end\U image))a(strcat[color=“red”]path“\\”a);
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 23:04:15 | 显示全部楼层
radio是键名,而不是sld名称。你只需要改变道路!永远不要更改幻灯片名称!!
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 23:06:08 | 显示全部楼层
幻灯片必须放在support文件夹中,或者创建它。或者尝试输入短名称路径,即:“C:\\LISP\”
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 23:10:41 | 显示全部楼层
 
谢谢你,我的朋友,
 
我把sld文件和lisp放在support文件夹中,同一个文件夹,如何修改路径?
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 06:40 , Processed in 0.451278 second(s), 72 queries .

© 2020-2025 乐筑天下

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