乐筑天下

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

[编程交流] Lisp无法正常工作

[复制链接]

37

主题

158

帖子

124

银币

后起之秀

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

铜币
205
发表于 2022-7-6 08:52:38 | 显示全部楼层 |阅读模式
有人能帮我解决这个Lisp程序的问题吗。我前阵子买的,从第一天开始就没用过,但我学会了如何处理它。
 
它应该做什么:选择一组对象。围绕最大范围创建边界框,并将其偏移2“
 
它正在做什么:它创建了一个形状奇怪的边界框,没有正方形的角。
 
如何通过:如果启动命令,选择所有需要的对象,然后放大并按enter键。缩小并正确绘制边界框。只有当你放大很多的时候,它才会起作用。
 
  1. (defun c:f6 (/ ll ur lr ul vlst ss clyr)
  2. ;;  do a polar offset of the corners
  3. ;;  ofs is a real of the offset value
  4. ;;  returns a new point list
  5. (defun offsetpts (ll lr ur ul ofs / ang)
  6.    (setq ang (angle ll lr)) ; base angle
  7.    (setq ll (polar ll (- ang (* pi 0.75)) (sqrt (* (* ofs ofs) 2)))
  8.          lr (polar lr (- ang (/ pi 4)) (sqrt (* (* ofs ofs) 2)))
  9.          ur (polar ur (+ ang (/ pi 4)) (sqrt (* (* ofs ofs) 2)))
  10.          ul (polar ul (+ ang (* pi 0.75)) (sqrt (* (* ofs ofs) 2)))
  11.    )
  12.    (if ll
  13.      (list ll lr ur ul)
  14.    )
  15. )       ; end defun
  16. ;;  CAB 10/17/2006
  17. ;;  returns a point list ((lower left)(upper right))
  18. (defun ssboundingbox (ss / i ent lst ptlst mnpt mxpt)
  19.    (setq i -1)
  20.    (while (setq ent (ssname ss (setq i (1+ i))))
  21.      (setq lst (cons (vlax-ename->vla-object ent) lst))
  22.    )
  23.    (mapcar '(lambda (x)
  24.               (vla-getboundingbox x 'mnpt 'mxpt)
  25.               (setq ptlst (cons (vlax-safearray->list mnpt) ptlst))
  26.               (setq ptlst (cons (vlax-safearray->list mxpt) ptlst))
  27.             )
  28.            lst
  29.    )
  30.    ;;following by Tony Tanzillo
  31.    (list
  32.      (apply 'mapcar (cons 'min ptlst))
  33.      (apply 'mapcar (cons 'max ptlst))
  34.    )
  35. )
  36. ;;=====================================================
  37. (setq clyr (getvar "clayer"))
  38. (prompt "\nSelect objects to frame.")
  39. (if (setq ss (ssget))
  40.    (progn
  41.      (setq llur (ssboundingbox ss))
  42.      (setq LL (car llur)
  43.            UR (cadr llur)
  44.            LR (list (car UR) (cadr LL))
  45.            UL (list (car LL) (cadr UR))
  46.      )
  47.      (setq vlst (offsetpts LL LR UR UL 2.0))
  48.      (command "-layer" "m" "Face 6" "c" "red" "" "lt" "Dashed" "Face 6" "")
  49.      (command "_.pline")
  50.      (mapcar 'command vlst)
  51.      (command "_c")
  52.    )
  53. )
  54. (setvar "clayer" clyr)
  55. loop
  56. (princ)
  57. )
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 09:00:25 | 显示全部楼层
如果UCS不是世界级的,那么它就不能很好地工作
 
所以
  1. (defun trns (pt)    (trans pt 0 1))

 
  1. (setq ll [color=blue](trns[/color] (polar ll (- ang (* pi 0.75)) (sqrt (* (* ofs ofs) 2)))[color=blue])[/color]
  2.          lr [color=blue](trns[/color] (polar lr (- ang (/ pi 4)) (sqrt (* (* ofs ofs) 2)))[color=blue])[/color]
  3.          ur [color=blue](trns[/color] (polar ur (+ ang (/ pi 4)) (sqrt (* (* ofs ofs) 2)))[color=blue])[/color]
  4.          ul [color=blue](trns[/color] (polar ul (+ ang (* pi 0.75)) (sqrt (* (* ofs ofs) 2)))[color=blue])[/color]
  5.    )

 
我并不是说这是个问题,但这只是众多问题中的一个。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:04:28 | 显示全部楼层
尝试以下操作:
 
从这里使用SelectionSet边界框。
回复

使用道具 举报

37

主题

158

帖子

124

银币

后起之秀

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

铜币
205
发表于 2022-7-6 09:07:05 | 显示全部楼层
它工作得很好。虽然它没有把盒子放在我目前的线型刻度“12”上。我该怎么做。我更改了一些内容,以便将其放在不同的层上。
  1. (defun c:f6 ( / _offsetoutside _corners->list ss )
  2.    ;; © Lee Mac 2011
  3.    (defun _offsetoutside ( a b )
  4.        (mapcar
  5.            (function
  6.                (lambda ( b c )
  7.                    (mapcar
  8.                        (function
  9.                            (lambda ( b c ) ((eval b) c a))
  10.                        )
  11.                        b c
  12.                    )                                
  13.                )
  14.            )
  15.           '((- -) (+ -) (+ +) (- +))
  16.            b
  17.        )
  18.    )
  19.    (defun _corners->list ( a b )
  20.        (mapcar
  21.            (function
  22.                (lambda ( a b ) (list (car a) (cadr b)))
  23.            )
  24.            (list a b b a) (list a a b b)
  25.        )
  26.    )
  27. (setq clyr (getvar "clayer"))
  28. (command "-layer" "m" "Face 6" "c" "red" "" "lt" "Dashed" "Face 6" "")
  29.    (if (setq ss (ssget '((0 . "~VIEWPORT"))))
  30.        (entmakex
  31.            (append
  32.                (list
  33.                    (cons 0 "LWPOLYLINE")
  34.                    (cons 100 "AcDbEntity")
  35.                    (cons 100 "AcDbPolyline")
  36.                    (cons 8 "Face 6")
  37.                    (cons 90 4)
  38.                    (cons 70 1)
  39.                )
  40.                (mapcar
  41.                    (function
  42.                        (lambda ( x ) (cons 10 x))
  43.                    )
  44.                    (_offsetoutside 2.0
  45.                        (apply '_corners->list (LM:SSBoundingBox ss))
  46.                    )
  47.                )
  48.            )
  49.        )
  50.    )
  51.    (princ)
  52. (setvar "clayer" clyr)               
  53. )
  54. ;;--------------=={ SelectionSet BoundingBox }==--------------;;
  55. ;;                                                            ;;
  56. ;;  Returns the lower-left and upper-right points of a        ;;
  57. ;;  rectangle bounding all objects in a supplied SelectionSet ;;
  58. ;;------------------------------------------------------------;;
  59. ;;  Author: Lee Mac, Copyright © 2011 - www.lee-mac.com       ;;
  60. ;;------------------------------------------------------------;;
  61. ;;  Arguments:                                                ;;
  62. ;;  ss - SelectionSet for which to return the BoundingBox     ;;
  63. ;;------------------------------------------------------------;;
  64. ;;  Returns:  Point List decribing BoundingBox (in WCS)       ;;
  65. ;;------------------------------------------------------------;;
  66. (defun LM:SSBoundingBox ( ss / i l1 l2 ll ur )
  67.    (repeat (setq i (sslength ss))
  68.        (vla-getboundingbox (vlax-ename->vla-object (ssname ss (setq i (1- i)))) 'll 'ur)
  69.        (setq l1 (cons (vlax-safearray->list ll) l1)
  70.              l2 (cons (vlax-safearray->list ur) l2)
  71.        )
  72.    )
  73.    (mapcar '(lambda ( a b ) (apply 'mapcar (cons a b))) '(min max) (list l1 l2))
  74. )
  75. (vl-load-com) (princ)
回复

使用道具 举报

37

主题

158

帖子

124

银币

后起之秀

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

铜币
205
发表于 2022-7-6 09:11:09 | 显示全部楼层
需要以上方面的帮助^^^^
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:17:12 | 显示全部楼层
试试这个:
 
  1. 5

 
此外,当修改他人编写的代码时,标记您的修改是一种很好的礼仪。
回复

使用道具 举报

37

主题

158

帖子

124

银币

后起之秀

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

铜币
205
发表于 2022-7-6 09:20:12 | 显示全部楼层
它返回了一个刻度。4、为什么?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:24:54 | 显示全部楼层
 
你告诉我。。。它使用您的LTSCALE设置。
回复

使用道具 举报

37

主题

158

帖子

124

银币

后起之秀

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

铜币
205
发表于 2022-7-6 09:30:31 | 显示全部楼层
ltscale是唯一确定虚线类型间距的工具吗?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:34:37 | 显示全部楼层
 
不,这也取决于线型定义本身。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-7 06:23 , Processed in 0.500179 second(s), 72 queries .

© 2020-2025 乐筑天下

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