乐筑天下

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

[编程交流] 调整断点

[复制链接]

57

主题

351

帖子

294

银币

后起之秀

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

铜币
285
发表于 2022-7-6 12:26:37 | 显示全部楼层 |阅读模式
我有一个lisp来插入块,90%都很好,插入的块大小相同,其中一些块会打断插入的线太多,下面的第一个插入很好,第二个在块的边缘(一个圆)和管道(acad中只有一条规则线)之间留有间隙,我连接了块,我知道这与第1和第2部分有关,但我不知道如何将它们改变到正确的点。
 
  1. (defun c:gv (/ *error* scl dis ov vl
  2.                lne pnt ang pt1 pt2)
  3. ;; Always localise your variables!
  4. (or (not (zerop (setq scl (getvar "DIMSCALE"))))
  5.      (setq scl 1.))
  6. ;; Dimscale may be zero - need to check for this
  7. (setq dis (* scl 0.0703))
  8. ;; Use an Error Handler as we are tampering with Sys Vars
  9. (defun *error* (msg)
  10.    (if ov (mapcar 'setvar vl ov)) ; Reset Sys Vars   
  11.    (if (not (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*"))
  12.      (princ (strcat "\n<< Error: " msg " >>")))
  13.    (princ))
  14. (setq vl '("CMDECHO" "OSMODE" "CLAYER") ; Sys Var list
  15.        ov (mapcar 'getvar vl)) ; Get Old Sys Var Values
  16. (if (or (tblsearch "BLOCK" "gv") ; Check for Block in Dwg...
  17.          (findfile "gv.dwg"))   ;... And in Search path
  18.    (progn
  19.      
  20.      (while ; While the following returns T
  21.       
  22.        (progn ; Wrap the following expressions
  23.          
  24.          (setq lne (entsel "\nSelect a Line: ")) ; Select a Line
  25.          
  26.          (cond ((null lne) t) ; Stay in Loop
  27.                ((eq "LINE"
  28.                   (cdr (assoc 0 (setq elst (entget (car lne)))))) nil) ; Exit Loop
  29.                (t (princ "\n** Incorrect Selection **"))))) ; Stay in Loop
  30.      
  31.      (if (setq pt (getpoint "\nPick Insertion Point: ")) ; Prompt for Point
  32.        (progn
  33.          (setq ang (angle (cdr (assoc 10 elst)) (cdr (assoc 11 elst)))) ; Get Line Angle
  34.          
  35.          (mapcar 'setvar vl (list 0 0 (cdr (assoc 8 (entget (car lne))))))
  36.          ; Set Sys Vars to how we want them - CMDECHO=0, OSMODE=0, CLAYER= <line layer>
  37.          
  38.          (command "-insert" "gv" pt scl scl (* 180. (/ ang pi))) ; insert Block
  39.          ;; Prefix commands with "_." to make them language compatible
  40.          
  41.          (setq pt1 (polar pt ang dis)
  42.                pt2 (polar pt (- ang pi) dis))
  43.          
  44.          (command "_.break" lne "_F" pt1 pt2))))
  45.    
  46.    (princ "\n<< Block Not Found >>")) ; Else the Block was not found
  47. (mapcar 'setvar vl ov) ; Reset Sys Vars
  48. (princ)) ; Exit Cleanly

 
  1. (defun c:priser (/ *error* scl dis ov vl
  2.                lne pnt ang pt1 pt2)
  3. ;; Always localise your variables!
  4. (or (not (zerop (setq scl (getvar "DIMSCALE"))))
  5.      (setq scl 1.))
  6. ;; Dimscale may be zero - need to check for this
  7. (setq dis (* scl 0.0703))
  8. ;; Use an Error Handler as we are tampering with Sys Vars
  9. (defun *error* (msg)
  10.    (if ov (mapcar 'setvar vl ov)) ; Reset Sys Vars   
  11.    (if (not (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*"))
  12.      (princ (strcat "\n<< Error: " msg " >>")))
  13.    (princ))
  14. (setq vl '("CMDECHO" "OSMODE" "CLAYER") ; Sys Var list
  15.        ov (mapcar 'getvar vl)) ; Get Old Sys Var Values
  16. (if (or (tblsearch "BLOCK" "priser") ; Check for Block in Dwg...
  17.          (findfile "priser.dwg"))   ;... And in Search path
  18.    (progn
  19.      
  20.      (while ; While the following returns T
  21.       
  22.        (progn ; Wrap the following expressions
  23.          
  24.          (setq lne (entsel "\nSelect a Line: ")) ; Select a Line
  25.          
  26.          (cond ((null lne) t) ; Stay in Loop
  27.                ((eq "LINE"
  28.                   (cdr (assoc 0 (setq elst (entget (car lne)))))) nil) ; Exit Loop
  29.                (t (princ "\n** Incorrect Selection **"))))) ; Stay in Loop
  30.      
  31.      (if (setq pt (getpoint "\nPick Insertion Point: ")) ; Prompt for Point
  32.        (progn
  33.          (setq ang (angle (cdr (assoc 10 elst)) (cdr (assoc 11 elst)))) ; Get Line Angle
  34.          
  35.          (mapcar 'setvar vl (list 0 0 (cdr (assoc 8 (entget (car lne))))))
  36.          ; Set Sys Vars to how we want them - CMDECHO=0, OSMODE=0, CLAYER= <line layer>
  37.          
  38.          (command "-insert" "priser" pt scl scl (* 180. (/ ang pi))) ; insert Block
  39.          ;; Prefix commands with "_." to make them language compatible
  40.          
  41.          (setq pt1 (polar pt ang dis)
  42.                pt2 (polar pt (- ang pi) dis))
  43.          
  44.          (command "_.break" lne "_F" pt1 pt2))))
  45.    
  46.    (princ "\n<< Block Not Found >>")) ; Else the Block was not found
  47. (mapcar 'setvar vl ov) ; Reset Sys Vars
  48. (princ)) ; Exit Cleanly

GV。图纸
普里泽。图纸
回复

使用道具 举报

57

主题

351

帖子

294

银币

后起之秀

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

铜币
285
发表于 2022-7-6 12:56:54 | 显示全部楼层
下图显示了GV(线上的第一个块),线在GV的边缘线处断开,然后显示圆棱镜和不与圆边缘相交的线。我希望他们能像对待GV一样面对边缘
132642w15dk4ed52w6wd45.jpg
回复

使用道具 举报

0

主题

269

帖子

279

银币

限制会员

铜币
-4
发表于 2022-7-6 13:26:18 | 显示全部楼层
“priser”块小于GV。
 
在以下行中:
(setq dis(*scl 0.0703)
 
将其更改为:
(setq dis(*scl 0.0469)
 
因为这是棱镜半径的值
回复

使用道具 举报

57

主题

351

帖子

294

银币

后起之秀

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

铜币
285
发表于 2022-7-6 13:36:31 | 显示全部楼层
很抱歉,很长一个周末没有回复。这很好用。。。谢谢
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-5 06:04 , Processed in 0.792069 second(s), 62 queries .

© 2020-2025 乐筑天下

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