乐筑天下

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

[编程交流] LISP-自动标签编号系统

[复制链接]

1

主题

5

帖子

4

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 17:51:45 | 显示全部楼层 |阅读模式
大家好,
 
我是这个论坛的新手,LISP。
但我正在实习,我的老板想让我在写代码的时候学到更多?
 
这就是我做的:
这是一个自动编号系统,有一个领导者,但我想它相当不稳定?大多数情况下,它是有效的,但通常只有第二次。第一次键入posnumber时,它会重复appload?
 
  1. (defun c:POSNumbering ( )
  2. (princ "\nAutolabel - Dutch Offshore Innovators - Clint de Bruijn")
  3. (setq NN (getint "\nStarting Number:") )
  4. (setq number (itoa NN))
  5. (while
  6. (setq p1 (getpoint "\nPick a POINT on the screen:") )
  7. (setq p1x (car p1))
  8. (setq p1y (cadr p1))
  9. (setq b (car p1))
  10. (setq c (cadr p1))
  11. (princ b)
  12. (princ ",")
  13. (princ c)
  14. (setq p2 (getpoint "\nPick a POINT on the screen:") )
  15. (setq p2x (car p2))
  16. (setq p2y (cadr p2))
  17. (princ b)
  18. (princ ",")
  19. (princ c)
  20. (command "leader" p1 p2 "" "" "N")
  21. (setq p3 (list (+ p2x 500) (+ p2y 400)))
  22. (setq p4 (list (+ p2x 500) (+ p2y -400)))
  23. (setq p5 (list (+ p2x -500) (+ p2y 400)))
  24. (setq p6 (list (+ p2x -500) (+ p2y -400)))
  25. (if (and (>= p2x p1x) (>= p2y p1y)) (command "rectangle" p2 p3))
  26. (if (and (> p2x p1x) (< p2y p1y)) (command "rectangle" p2 p4))
  27. (if (and (< p2x p1x) (> p2y p1y)) (command "rectangle" p2 p5))
  28. (if (and (<= p2x p1x) (<= p2y p1y)) (command "rectangle" p2 p6))
  29. (setq p7 (list (+ p2x 250) (+ p2y 200)))
  30. (setq p8 (list (+ p2x 250) (+ p2y -200)))
  31. (setq p9 (list (+ p2x -250) (+ p2y 200)))
  32. (setq p10 (list (+ p2x -250) (+ p2y -200)))
  33. (if (and (>= p2x p1x) (>= p2y p1y)) (command "Text" "Middle" p7 "200" "0" number ""))
  34. (if (and (> p2x p1x) (< p2y p1y)) (command "Text" "Middle" p8 "200" "0" number ""))
  35. (if (and (< p2x p1x) (> p2y p1y)) (command "Text" "Middle" p9 "200" "0" number ""))
  36. (if (and (<= p2x p1x) (<= p2y p1y)) (command "Text" "Middle" p10 "200" "0" number ""))
  37. (setq number (itoa (setq NN (+ NN 1))))
  38. )
  39. )
[/noparse]代码标记(您可以修改帖子-只需单击编辑帖子)。。。
 
现在谈谈你的问题。。。
您可以将当前的osmode设置(OSNAP)保存在一些随机(setq)变量中。。。(setq osm(getvar‘osmode))
然后,您可以将“osmode(OSNAP)variable Previor calculations”设置为0-关闭OSNAP。。。(setvar“osmode 0)
在计算(例程)结束时,您可以将保存的“osmode”设置恢复到其以前的状态。。。(setvar‘osmode osm)
本地化所有使用的变量p1、p2,。。。包括现在提出的用于OSNAP的osm。。。(defun c:yourcommandfunction(/var1 var2…varn)
在例程类型(princ)的末尾,静默退出以避免在命令提示下返回nil。。。
 
如果您希望不必在“osmode”中使用此技巧,但强烈建议您在每个命令调用中提供的每个点参数之前指定“\u non”字符串,如(命令“矩形”p1 p2),以便正确的行应如(命令“\u.rectangle”“\u non”p1“\u non”p2)。。。尝试在所有命令前加上“_”标志,以避免不同版本的AutoCAD软件之间的语言障碍“_”标志;和“”用于调用命令的内置版本的签名。。。
 
作为开场白,这一切从我现在开始。。。
M、 R。
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 18:01:08 | 显示全部楼层
这是一个很好的代码,第一次这样做。似乎需要注意:1)确保本地化变量,2)确保添加错误捕获。Lee Mac有一个很棒的自动标记LISP例程,它也使用reactor,所以如果你想找一个例子,请点击这里http://lee-mac.com/autolabelattributes.html.
回复

使用道具 举报

95

主题

477

帖子

383

银币

后起之秀

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

铜币
475
发表于 2022-7-5 18:06:04 | 显示全部楼层
你好
 
创建带有框架的MleaderStyle,如以下视频所示,代码与您的代码相比只需几行
 
请参阅此链接中的视频:http://store1.up-00.com/2016-03/145874939933891.gif
 
  1. Your code here...
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 18:11:46 | 显示全部楼层
再深入一点,你可以检查所有MLeader并查看数字,比如他们是否在1层上,然后返回下一个要接受或忽略的数字。记住最后一个数字总是很难。发布dwg可能在复活节期间有一段时间。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 18:14:26 | 显示全部楼层
此版本将检查最后一个数字,需要两个defuns 1表示不存在前导,第二个查找最后一个数字。它逐层检查引线,可以添加其他选项。同时下载getvals。getvals。lsp
  1. (defun c:test (/ n p)
  2. (princ "\nAutolabel - Dutch Offshore Innovators - Clint de Bruijn")
  3. (if (setq n (getint "\nStarting Number:"))
  4.    (while (setq p (getpoint "\nFirst point:"))
  5.    (command "_.Mleader" "_non" p "_non" (getpoint "\nNext point:" p) (itoa n))
  6.      (setq n (1+ n))
  7.      )
  8.    )
  9. (princ)
  10. )
185150vz9qyjgzgujillgs.png
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 18:21:14 | 显示全部楼层
你好,M.R。
 
谢谢你的回复,代码现在已经正确发布了
 
对不起,你所说的对我来说就像中文,如果你已经花了7个小时来理解这个代码的编码原理。。
I'ts sounds lazy,but I learn more from complete codes as examples(I'ts听起来很懒,但我从完整的代码示例中了解了更多信息。。。
 
出于某种原因,'''''progeCAD不起作用?当您键入defun时,代码不会引导或崩溃。
 
谢谢你的帮助!
 
克林特·格里茨
回复

使用道具 举报

1

主题

5

帖子

4

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 18:26:42 | 显示全部楼层
尊敬的野马队:,
 
感谢您的回复!
你说的错误捕捉是什么意思?它是如何工作的?
我知道李的网站,他做了一些令人难以置信的好工作!但非常不幸的是,他的代码与progeCAD不兼容?他的自动文本引导正是我一直在寻找的地方
 
克林特·格里茨
回复

使用道具 举报

1

主题

5

帖子

4

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 18:32:03 | 显示全部楼层
亲爱的Tharwat,
 
此外,这段代码在progecad中不起作用,但我非常感谢您付出了如此多的努力来制作“视频”作为示例。
我认为progecad对我来说有两个问题?
1. ''_.'' 不起作用?
2.mleader不是progecad中的命令:l
 
谢谢您的回复!
 
克林特·格里茨
回复

使用道具 举报

1

主题

5

帖子

4

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 18:37:31 | 显示全部楼层
你好,比格尔,
 
当然,我可以发布一个dwg,但我不知道怎么做,我不明白它的意义?
 
就像这个线程上的其他东西一样,你的代码也不管用
我真的认为progecad对lsp格式非常敏感?
 
格里茨,
克林特
回复

使用道具 举报

1

主题

5

帖子

4

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 18:43:27 | 显示全部楼层
我知道其他一些CAD程序不支持DCL,这是getvals正在使用的。
 
Progecad使用Intellicad引擎,lisp和dcl工作,因此不确定为什么它不工作,需要一份Progecad副本进行测试。为了在Intellicad中工作,我们确实需要稍微修改一些代码。
 
试试看,不确定Intellicad是否支持将lisp直接复制到命令行Autocad是否会将(defun lastnum 1)后面的4行一次复制到命令行,您应该会看到一个响应ss行应该表示类似于选择集的内容
 
将此行中的x替换为0,然后1 2等,并粘贴到命令行
(setq num(atoi(cdr(assoc 304(entget(ssname ss(setq x(-x 1 107;)Ю)Ю)Ю))))
您应该再次看到mleader编号
 
粘贴这两行,dcl应该弹出。如果没有,您可能没有将lsp保存到progecad可以找到它的位置。
(如果(非AH:getval1)(加载“getvals”))
(AH:getval1“Next pt num is”6 4)
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-12 23:40 , Processed in 0.494850 second(s), 74 queries .

© 2020-2025 乐筑天下

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