乐筑天下

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

[编程交流] 在一个

[复制链接]

8

主题

56

帖子

48

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-6 11:47:19 | 显示全部楼层 |阅读模式
我试图编写一个lisp例程来自动选择天花板网格中点的中心。因此,当您在天花板网格的“框”中为该点选择一个点时,无论网格是否旋转,它都会在该网格点的死点插入一个块。
 
那么,在一个长方体中选取一个点,并返回该长方体的死点,无论旋转如何?
 
像泥一样清澈?我有一个这样做的网格是在0度运行。。。。。没有优化的代码,所以不要锤我。它适用于我们:-)
 
  1. (defun c:MULT8 ()
  2. (setq aper (getvar "aperture"))
  3. (setvar "aperture" 50)
  4. (command "setvar" "cmdecho" "0")
  5.   (if (= VALUE nil) (setq VALUE " "))
  6. ;   (setq q1 (strcat "\nWhat is attribute value? <" VALUE ">.."))
  7. ;   (setq OL VALUE VALUE (strcase (getstring q1)))
  8.   (if (= VALUE "") (setq VALUE OL))
  9.   (SETQ PT NIL)
  10.   (SETQ PT (GETPOINT))
  11.   (while (NOT (NULL PT))
  12.    (setq newpt (osnap pt "int"))
  13.    (if (/= newpt nil)
  14.    (progn
  15.    (setq angfound (rtd (angle newpt pt)))
  16.    (cond
  17.        (
  18.         (and
  19.          (> angfound 0)
  20.          (< angfound 90)
  21.         )
  22.        (setq angins 45)
  23.        )
  24.        (
  25.         (and
  26.          (> angfound 90)
  27.          (< angfound 180)
  28.         )
  29.        (setq angins 135)
  30.        )
  31.        (
  32.         (and
  33.          (> angfound 180)
  34.          (< angfound 270)
  35.         )
  36.        (setq angins 225)
  37.        )
  38.        (
  39.         (and
  40.          (> angfound 270)
  41.          (< angfound 360)
  42.         )
  43.        (setq angins 315)
  44.        )
  45.        (
  46.        (= angfound 180)
  47.         (setq angins 0)
  48.        )
  49.        (
  50.        (= angfound 90)
  51.         (setq angins 270)
  52.        )
  53.        (
  54.        (= angfound 0)
  55.         (setq angins 180)
  56.        )
  57.        (
  58.        (= angfound 270)
  59.         (setq angins 90)
  60.        )
  61.    )
  62.    )
  63.    )
  64. (if (= newpt nil)
  65.        (progn
  66.        (setq newpt pt)
  67.        (print "newpt")
  68.        (command "insert" block newpt "" "" "")
  69.        )
  70.    (progn
  71.    (print"past")
  72.    
  73.    (setq inpt (polar newpt (dtr angins) (sqrt 288)))
  74.    (command "insert" block inpt "" "" "")
  75.    )
  76.    )
  77.    
  78.    
  79. (COMMAND "SETVAR" "HIGHLIGHT" "1")
  80.   (SETQ PT NIL)
  81.   (SETQ PT (GETPOINT))
  82. )
  83. )
回复

使用道具 举报

8

主题

56

帖子

48

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-6 11:56:32 | 显示全部楼层
这里是一些网格图片
124720tdluzcn9kccce11a.png
124721lbivsbvf7ng0b7iv.png
回复

使用道具 举报

4

主题

327

帖子

324

银币

初来乍到

Rank: 1

铜币
19
发表于 2022-7-6 12:06:20 | 显示全部楼层
尝试使用-boundary命令(命令“-boundary”pt)
(setq pt getpoint)
(命令“-边界”pt)
(setq ent(entget(entlast))
现在获取相反的角点,并找到插入点的中点
(entdel(entlast))_删除边界
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 12:11:08 | 显示全部楼层
另一种方法是使用CAL(int+int)/2.0
 
或者只是两个点中间的Lisp程序
回复

使用道具 举报

8

主题

56

帖子

48

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-6 12:20:34 | 显示全部楼层
感谢您的输入!如果广场上没有其他东西,边界就可以了。但很多时候里面可能有一扇门或一个房间的名字。我们可以把房间的名字关掉,但我尽量避免。
回复

使用道具 举报

15

主题

209

帖子

121

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
163
发表于 2022-7-6 12:27:04 | 显示全部楼层
“mtp”或“m2p”(给你一个介于2点之间的点)
 
然后选择两个相对的角。
回复

使用道具 举报

8

主题

56

帖子

48

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-6 12:34:21 | 显示全部楼层
是的,我可以选择两点,但我的任务是选择一点。当网格为0和90度时,它工作正常,但当建筑师或建筑不是0和90度时,我不知所措。。。。。
回复

使用道具 举报

8

主题

56

帖子

48

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-6 12:46:00 | 显示全部楼层
好的,这就是我想到的。如果你被放大到很远的地方,它肯定很慢,但可以工作。
 
  1. (defun c:headins ()
  2. (SETQ PT NIL)
  3.   (SETQ PT (GETPOINT))
  4.   (while (NOT (NULL PT))
  5.    (Command "-boundary" pt "")
  6.    (setq item (entlast))
  7.    ;convert to vl object
  8.    (setq item (vlax-ename->vla-object item))
  9.    ; (setq cPl (vlax-ename->vla-object(car(entlast))))
  10.    (vla-GetBoundingBox item 'blPt 'trPt)
  11.    (setq lPt(vlax-safearray->list blPt))
  12.    (setq tPt(vlax-safearray->list trPt))
  13.    (setq inspt (CAL "(lpt + tpt) / 2.0"))
  14.    (entdel (entlast))
  15.    (command "insert" block inspt "" "" "")
  16.    (SETQ PTOLD PT)
  17.    (SETQ PT NIL)
  18.    (SETQ PT (GETPOINT))
  19. )
  20. )
回复

使用道具 举报

8

主题

56

帖子

48

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-6 12:48:20 | 显示全部楼层
这大大加快了速度。我创建了一个包含文本“grid”的所有层的边界选择集。
 
  1. (defun c:headins ()
  2. ;(ssget gridl (ssget "_X" (list "GRID")))
  3. (setq gridl (ssget "_X" '((8 . "GRID"))))
  4. (SETQ PT NIL)
  5.   (SETQ PT (GETPOINT))
  6.   (while (NOT (NULL PT))
  7.    (Command "-boundary" "a" "b" "n" (ssget "_X" '((8 . "*GRID*"))) "" "" pt "")
  8.    (setq item (entlast))
  9.    ;convert to vl object
  10.    (setq item (vlax-ename->vla-object item))
  11.    ; (setq cPl (vlax-ename->vla-object(car(entlast))))
  12.    (vla-GetBoundingBox item 'blPt 'trPt)
  13.    (setq lPt(vlax-safearray->list blPt))
  14.    (setq tPt(vlax-safearray->list trPt))
  15.    (setq inspt (CAL "(lpt + tpt) / 2.0"))
  16.    (entdel (entlast))
  17.    (command "insert" block inspt "" "" "")
  18.    (SETQ PTOLD PT)
  19.    (SETQ PT NIL)
  20.    (SETQ PT (GETPOINT))
  21. )
  22. )
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-5 10:56 , Processed in 0.331328 second(s), 72 queries .

© 2020-2025 乐筑天下

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