乐筑天下

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

[编程交流] 版本兼容性问题。。

[复制链接]

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:14:47 | 显示全部楼层 |阅读模式
大家好,
 
希望你们今天过得愉快,不要工作过度(只够勉强应付)。
 
只是一个简单的问题-我相信这里有人能够回答-如果没有,不用担心。
 
关于此线程:
 
http://www.cadtutor.net/forum/showthread.php?t=31790
 
我发布了以下LISP以响应上面线程中发布的绘图示例:
 
  1. ; Diamond ~ by Lee McDonnel [25.01.2009]
  2. ; Places a Diamond Block at the Intersection of a LWPolyline
  3. ; [Assumes Diamond Block Definition is in Drawing]
  4. ; [updated to remove intersecting line]
  5. (defun c:diamond (/ ss lEnt eLst sLin eLin pvert i int intLst)
  6. (vl-load-com)
  7. (if (and (setq ss (ssget '((0 . "LWPOLYLINE"))))
  8.       (setq lEnt (car (entsel "\nSelect Intersecting Line > ")))
  9.       (eq (cdr (assoc 0 (entget lEnt))) "LINE"))
  10.    (progn
  11.      (setq eLst (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
  12.        sLin (cdr (assoc 10 (entget lEnt)))
  13.        eLin (cdr (assoc 11 (entget lEnt))))
  14.      (foreach ent eLst
  15.    (setq pVert (mapcar 'cdr (vl-remove-if '(lambda (x) (/= 10 (car x))) (entget ent))))
  16.    (if (eq (setq i (length pVert)) 4)
  17.      (progn
  18.        (while (not (zerop (setq i (1- i))))
  19.          (if (setq int (inters sLin eLin (nth i pVert) (nth (1- i) pVert)))
  20.        (setq intLst (cons int intLst))))
  21.        (setq intLst (vl-sort intLst '(lambda (x1 x2) (< (car x1) (car x2)))))
  22.        (SetBlkTF "3ANSYMB")
  23.        (entmake (list (cons 0 "INSERT") (cons 2 "3ANSYMB") (cons 10 (cadr intLst))))
  24.        (entmake (list (cons 0 "INSERT") (cons 2 "3ANSYMB") (cons 10 (cons (- (caar intLst) 6.5515) (cdar intLst))))))))
  25.      (entdel lEnt))
  26.    (princ "\n<!> No Line Selected, or this isn't a Line! <!>"))
  27. (princ))
  28. (defun SetBlkTF    (n)
  29.    (cond ((not (snvalid n))
  30.       (princ "\nInvalid Block Name - " n)
  31.       (exit))
  32.      ((tblsearch "BLOCK" n))
  33.      ((findfile (strcat n ".DWG"))
  34.       (command "_.INSERT" n)
  35.       (command))
  36.      (T ; If all else fails....
  37.       (entmake (list (cons 0 "BLOCK") (cons 2 n) (cons 10 (list 0 0 0)) (cons 70 0)))
  38.       (entmake (list (cons 0 "TEXT")
  39.              (cons 1 (strcat "BLOCK PLACECARD - " n))
  40.              (cons 7 (cdr (assoc 2 (tblnext "STYLE" T))))
  41.              (cons 8 "0")
  42.              (cons 10 (list 0 0 0))
  43.              (cons 11 (list 0 0 0))
  44.              (cons 40 (max 1 (getvar "TEXTSIZE")))
  45.              (cons 72 4)))
  46.       (entmake (list (cons 0 "ENDBLK") (cons 8 "0")))))n)

 
但是,由于一些未知的原因(记录在链接线程中),LISP似乎在我的机器上运行,运行ACAD'04,但在OP的机器上运行'07。
 
我想不出发生这种情况的原因,因为在LISP中,我没有使用任何“命令”函数(消除了提示顺序不同的可能性),而且我认为AutoLISP在3年内没有发生如此大的变化。
 
最后,Fixo发布了该问题的另一个解决方案,使用类似的方法插入所需的块,但是他的代码在2007年正确运行。
 
如果有人能提供更多信息,说明为什么我的帖子在07年没有成功,但在04年成功,我将不胜感激。
 
谢谢你花时间阅读这篇文章,如果你还没有这样做,祝你度过愉快的一天。
 
干杯
 
回复

使用道具 举报

10

主题

8258

帖子

8335

银币

初来乍到

Rank: 1

铜币
31
发表于 2022-7-6 15:42:00 | 显示全部楼层
可能是对AutoCAD系统变量的更改?
 
http://www.hyperpics.com/system_variables/
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:56:15 | 显示全部楼层
非常感谢您的链接评论,但我不认为我篡改了LISP中的任何系统变量-但感谢您的建议。
 
已将该页面添加为书签以供以后参考-谢谢
回复

使用道具 举报

10

主题

8258

帖子

8335

银币

初来乍到

Rank: 1

铜币
31
发表于 2022-7-6 16:09:50 | 显示全部楼层
错误检查?常规程序得到的是一个它无法识别或预期的响应,因此它会爆炸?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 16:20:09 | 显示全部楼层
显然,根据杰克·奥尼尔(Jack O'Neill)的说法,没有发生任何错误——例程在修改一个实体后就完成了——似乎“foreach”没有遍历实体列表,或者ssnamex没有返回完整的实体名称列表。。。但很明显,这些在04年起作用,那么为什么他们不应该在07年。。。。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 18:19 , Processed in 0.354161 second(s), 62 queries .

© 2020-2025 乐筑天下

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