明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5022|回复: 16

求框选对象为块的程序?

  [复制链接]
发表于 2010-5-14 14:23:00 | 显示全部楼层 |阅读模式

各位好:

            现需求一种程序,输入命令,然后框选所选对象直接转换为块,谢谢大家!

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2010-5-14 15:08:00 | 显示全部楼层
不需给块名?
发表于 2010-5-14 15:33:00 | 显示全部楼层
本帖最后由 作者 于 2010-6-16 12:48:54 编辑

前几天在老虎空间帮人改了段代码(不好意思,不知道源代码是哪位的,采用了时间作为块名的方法),主要加了一段,让块的插入点在左下角的,就顺便贴一下 :),有空再来改成不用command的
  1. ;;std-lib
  2. (defun std-sslist (ss / n lst)
  3.   (if (eq 'pickset (type ss))
  4.     (repeat (setq n (fix (sslength ss))) ; fixed
  5.       (setq lst (cons (ssname ss (setq n (1- n))) lst))
  6.     )
  7.   )
  8. )
  9. ;;get the boundingbox of object by qjchen
  10. (defun leftcornerofss(ss / maxpt maxptlst minpt minptlst obj x)
  11.   (setq ss (std-sslist ss))
  12.   (foreach x ss
  13.     (setq obj (vlax-ename->vla-object x))
  14.     (setq minPt (vlax-make-safearray vlax-vbdouble '(0 . 2)))
  15.     (setq maxPt (vlax-make-safearray vlax-vbdouble '(0 . 2)))
  16.     (vla-GetBoundingBox Obj 'minpt 'maxpt) ; 得到包围框
  17.     (setq minPt (vlax-safearray->list minPt))
  18.     (setq maxPt (vlax-safearray->list maxPt))
  19.     (setq minPtlst (append minPtlst (list minPt)))
  20.     (setq maxPtlst (append maxPtlst (list maxPt)))  
  21.   )
  22.   (list (apply 'min (mapcar 'car minPtlst))
  23.         (apply 'min (mapcar 'cadr minPtlst))
  24.         0
  25.   )
  26. )
  27. (defun C:bkK (/ HOLDECHO HOLDBLIP A AA BLKREF pt left)
  28.   (VL-LOAD-COM)
  29.   (setq AA (ssget))
  30.   (setq leftc (leftcornerofss AA))
  31.   ;(grdraw (list 0 0 0) leftc 1)
  32.   (command "_.undo" "_group")
  33.   (setq HOLDECHO (getvar "cmdecho"))
  34.   (setq HOLDBLIP (getvar "blipmode"))
  35.   (setvar "cmdecho" 0)
  36.   (setvar "blipmode" 0)  
  37.   (setq A (rtos (* (getvar "CDATE") 1E8)))
  38.   
  39.   (if (/= AA NIL)
  40.     (progn
  41.       (command "_.BLOCK" A  "non" leftc AA "")
  42.       (command "_.INSERT" A "non" leftc "" "" "")
  43.     )
  44.   )
  45.   (setvar "blipmode" HOLDBLIP)
  46.   (setvar "cmdecho" HOLDECHO)
  47.   (command "_.undo" "_end")
  48.   (princ)
  49. )
 楼主| 发表于 2010-5-14 16:47:00 | 显示全部楼层
谢谢楼上的热心,很好用!
发表于 2010-5-15 14:21:00 | 显示全部楼层
哇!不错的思路,时间作为块名,学习了!
发表于 2010-5-16 10:44:00 | 显示全部楼层
  1. (defun c:tt (/ ss)
  2.   (if (setq ss (ssget))
  3.     (progn
  4.       (vl-cmdf ".cutclip" ss "")
  5.       (vl-cmdf ".pasteblock")
  6.     )
  7.   )
  8.   (princ)
  9. )
发表于 2010-6-15 08:12:00 | 显示全部楼层

超好用,谢谢。

 

六楼也行,

 

不过如果三楼能加入一个输入块名的选项就更好,现在貌似按系统时间生成

发表于 2010-6-15 17:04:00 | 显示全部楼层

一个用于修改特定块属性的程序

不过如果三楼能加入一个输入块名的选项就更好,现在貌似按系统时间生成

-----那不跟用cad命令建块一样?还用编程?
发表于 2010-6-16 12:08:00 | 显示全部楼层
(defun c:BB ()
  (setvar "osmode" 183)
(COMMAND "UCS" "w")
  (setvar "ORTHOMODE" 0)
    (prompt "\n快速创建图块.....")
  (setq a (ssget))
  (command "_copybase" "0,0" a "")
   (COMMAND "ERASE" a "")
  (command "_pasteblock" "0,0" "")
  (setvar "ORTHOMODE" 1)
  (setq date0 (menucmd "M=$(edtime,$(getvar,date), YY.MO.DD hh.mm)"))
    (prompt "\n创建图块已OK.....当前日期:")  (princ date0)(princ))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
发表于 2010-6-20 11:41:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-25 22:52 , Processed in 0.203354 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表