乐筑天下

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

[编程交流] 四舍五入LISP(需要帮助r

[复制链接]

56

主题

256

帖子

230

银币

后起之秀

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

铜币
253
发表于 2022-7-5 15:30:09 | 显示全部楼层 |阅读模式
我很早以前就知道这个Lisp程序了,忘了它是从哪里来的。
 
它循环了“FACE3D、ARC、ATTDEF、ATTRIB、CIRCLE、ELLIPSE、INSERT、LINE、POLYLINE、LWPOLYLINE、*TEXT、POINT、SHAPE、SOLID、TRACE”。
 
但我希望它也能圆化尺寸点,使其与直线/多段线等的新定位端点位于同一位置。
 
看看这里我指的是什么暗点。
163013ajy2wpez8s5sjy0a.jpg
 
我不知道从哪里开始工作。
 
谢谢
 
 
  1. (defun round_number (xr n / )
  2. (* (fix (atof (rtos (* xr n) 2 0))) (/ 1.0 n))
  3. )
  4. (defun c:FX_Round_Numbers ( / js n_count ent dxf_ent dxf_lst)
  5. (setq su (getvar 'SNAPUNIT))
  6. (setq tol (getreal "\nEnter the tolerance in X & Y: "))
  7. (setvar "SNAPUNIT" (list tol tol))
  8. (setq js (ssget '((0 . "FACE3D,ARC,ATTDEF,ATTRIB,CIRCLE,ELLIPSE,INSERT,LINE,POLYLINE,LWPOLYLINE,*TEXT,POINT,SHAPE,SOLID,TRACE"))) n_count -1)
  9. (cond
  10.         (js
  11.                 (setvar "cmdecho" 0)
  12.                 (command "_.undo" "_group")
  13.                 (while (setq ent (ssname js (setq n_count (1+ n_count))))
  14.                         (setq dxf_ent (entget ent))
  15.                         (cond
  16.                                 ((eq (cdr (assoc 0 dxf_ent)) "LWPOLYLINE")
  17.                                         (setq dxf_lst (cdr dxf_ent) dxf_ent (list (car dxf_ent)))
  18.                                         (while (cdr dxf_lst)
  19.                                                 (if (eq 10 (caar dxf_lst))
  20.                                                         (setq dxf_ent (cons (cons 10 (mapcar '(lambda (x p) (round_number x (/ 1 p))) (cdar dxf_lst) (getvar "SNAPUNIT"))) dxf_ent))
  21.                                                         (setq dxf_ent (cons (car dxf_lst) dxf_ent))
  22.                                                         )
  23.                                                 (setq dxf_lst (cdr dxf_lst))
  24.                                                 )
  25.                                         (setq dxf_ent (reverse dxf_ent))
  26.                                         )
  27.                                 ((eq (cdr (assoc 0 dxf_ent)) "POLYLINE")
  28.                                         (while (eq (cdr (assoc 0 (setq dxf_ent (entget (entnext (cdar dxf_ent)))))) "VERTEX")
  29.                                                 (setq dxf_ent (subst (cons 10 (mapcar '(lambda (x p) (round_number x (/ 1 p))) (cdr (assoc 10 dxf_ent)) (append (getvar "SNAPUNIT") (list (car (getvar "SNAPUNIT")))))) (assoc 10 dxf_ent) dxf_ent))
  30.                                                 (entmod dxf_ent)
  31.                                                 )
  32.                                         )
  33.                                 (T
  34.                                         (foreach n dxf_ent
  35.                                                 (if (member (car n) '(10 11 12 13 40))
  36.                                                         (if (listp (cdr n))
  37.                                                                 (setq dxf_ent (subst (cons (car n) (mapcar '(lambda (x p) (round_number x (/ 1 p))) (cdr n) (append (getvar "SNAPUNIT") (list (car (getvar "SNAPUNIT")))))) (assoc (car n) dxf_ent) dxf_ent))
  38.                                                                 (setq dxf_ent (subst (cons (car n) (round_number (cdr n) (/ 1 (car (getvar "SNAPUNIT"))))) (assoc (car n) dxf_ent) dxf_ent))
  39.                                                                 )
  40.                                                         )
  41.                                                 )
  42.                                         )
  43.                                 )
  44.                         (entmod dxf_ent)
  45.                         (entupd ent)
  46.                         )
  47.                
  48.                 ;; TEST CODE TO UPDATE THE HATCH
  49.                 (command "_.move" (entlast) "" '(0 0 1e99) ""
  50.                                                 "_.move" "_p" "" '(0 0 -1e99) "")
  51.                                                
  52.                                                
  53.                 (command "_.undo" "_end")
  54.                 (setvar "cmdecho" 1)
  55.                 (setvar "SNAPUNIT" su)
  56.                 (princ (strcat "\n" (itoa n_count) " transformed objects (s)."))
  57.                 )
  58.         (T (princ "\nNo found valid object ."))
  59.         )
  60. (prin1)
  61. )
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-14 00:17 , Processed in 0.633692 second(s), 57 queries .

© 2020-2025 乐筑天下

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