明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2468|回复: 12

求线组合成块(采用格式刷那种样子)

  [复制链接]
发表于 2012-1-7 12:30 | 显示全部楼层 |阅读模式
1明经币
本帖最后由 flytoday 于 2012-1-7 12:31 编辑



哪位高手弄下啊谢谢~~~~
我找的无名块源码。


附件: 您需要 登录 才可以下载或查看,没有账号?注册

最佳答案

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2012-1-7 12:30 | 显示全部楼层
再试试
  1. (defun c:tt( / ss n en dxfcod pt ss1)
  2.   (defun ptrlist ( pt r / rlist n)
  3.   (setq rlist nil n 0)
  4.   (repeat 30
  5.     (setq rlist (cons (polar pt (* 12 n (/ pi 180)) r) rlist))
  6.     (setq n (1+ n))
  7.     )
  8.   rlist
  9.   )
  10.   (defun blk (ss pt / ss pt doc space objs idx blkobj sArray);无名块
  11.    (vl-load-com)
  12.    (setq doc (vla-get-activedocument (vlax-get-acad-object))
  13.          space (if (= (vla-get-activespace doc) 1)
  14.                        (vla-get-ModelSpace doc)
  15.                        (vla-get-PaperSpace doc))
  16.          idx     -1)
  17.    (repeat (sslength ss)
  18.        (setq objs (cons (vlax-ename->vla-object (ssname ss (setq idx (1+ idx))))
  19.                                          objs))
  20.        )
  21.    (mapcar '(lambda (e) (vla-move e (vlax-3d-point pt) (vlax-3d-point '(0 0 0)))) objs)
  22.    (setq blkobj (vla-add (vla-get-blocks doc) (vlax-3d-point '(0 0 0)) "*U"))
  23.    (setq sArray (vlax-safearray-fill (vlax-make-safearray  vlax-vbObject  (cons 0 (1- (length objs))))
  24.                                  objs))
  25.    (vla-copyobjects doc sArray blkobj)
  26.    (mapcar 'vla-delete objs)
  27.    (vla-insertblock space (vlax-3d-point pt) (vla-get-name blkobj) 1 1 1 0)
  28.    (mapcar 'vlax-release-object (list doc space blkobj))
  29.    (princ)
  30.    )
  31.   (setq oldvar (mapcar 'getvar '("cmdecho" "osmode")))
  32.   (mapcar 'setvar '("cmdecho" "osmode") '(0 0 2))
  33.   (if (not (and
  34.   (= (getvar "ucsname") "")
  35.   (equal '(0.0 0.0 0.0) (getvar"ucsorg"))
  36.   (equal '(1.0 0.0 0.0) (getvar"ucsxdir"))
  37.   (equal '(0.0 1.0 0.0) (getvar"ucsydir"))
  38.   ))
  39.   (progn (command "_.ucs" "w") (command "_.zoom" "p"))
  40.   )
  41.   (setq ss (ssget '((0 . "CIRCLE,ELLIPSE"))) n 0)
  42.   (if ss
  43.   (repeat (sslength ss)
  44.     (setq en (ssname ss n))
  45.     (setq dxfcod (entget en))
  46.     (setq pt (cdr (assoc 10 dxfcod)))
  47.     (cond
  48.       ((= "CIRCLE" (cdr (assoc 0 dxfcod))) (setq r (cdr (assoc 40 dxfcod))))
  49.       ((= "ELLIPSE" (cdr (assoc 0 dxfcod))) (setq r (distance '(0 0 0) (cdr (assoc 11 dxfcod)))))
  50.       )
  51.     (setq ptlist (ptrlist pt r))
  52.     (setq ss1 (ssget "_wp" ptlist))
  53.     (if ss1 (progn (ssadd en ss1) (blk ss1 pt)))
  54.     (setq n (1+ n))
  55.     )
  56.     )
  57.   (mapcar 'setvar '("cmdecho" "osmode") oldvar)
  58.   (princ)
  59.   )
回复

使用道具 举报

发表于 2012-1-7 12:36 | 显示全部楼层
帮顶一个!!!!!!!!!!!!!!!!!
回复

使用道具 举报

发表于 2012-1-7 13:13 | 显示全部楼层
思路?
1、找到相交直线,并以交点作为块插入点
2、根据交点找到最近的园
3、把园和直线组合做块
回复

使用道具 举报

 楼主| 发表于 2012-1-7 13:40 | 显示全部楼层
严哥谢谢捧场。思路嘛我也不会哈

我觉滴你这路太针对性了哈,,,会不会有点不通用哈,,

最好是能指定线、多义线,闭合的线。随意能组合成块最好哈

点评

那就加点手动选择,你想怎么组合都可以  发表于 2012-1-7 14:26
回复

使用道具 举报

 楼主| 发表于 2012-1-7 14:33 | 显示全部楼层
那个无名块要一条线一条线滴选择啊。我要框选下,一下子几个组合一起啊,,谢谢高手给弄下啊谢谢

点评

如果只是针对你你的图片示意这个好实现,一个简单的方法,获取圆内实体成块就可以了,如果需要框选任意形状,我想电脑如何知道你需将那些实体组合一起呢...? 要么增加一个基准条件...  发表于 2012-1-7 14:53
回复

使用道具 举报

 楼主| 发表于 2012-1-7 15:10 | 显示全部楼层
哦这处没想到哈。。我认得电脑不认得哈,。老大帮帮忙哈
回复

使用道具 举报

发表于 2012-1-7 15:26 | 显示全部楼层
理论上是可以编出这样的程序的,实际是我的时间不允许,等有空再帮你研究下了
回复

使用道具 举报

发表于 2012-1-8 21:05 | 显示全部楼层
看来很难哈

点评

难度没多大,思路已有,只可可惜我还没接触到你那么多  发表于 2012-1-9 08:24
回复

使用道具 举报

发表于 2012-1-9 09:35 | 显示全部楼层
这个试试看,这图里全是椭圆呀,不过长轴与短轴相同,可以当园来用。
  1. (defun c:tt( / ss n en dxfcod pt ss1)
  2.   (defun ptrlist ( pt r / rlist n)
  3.   (setq rlist nil n 0)
  4.   (repeat 30
  5.     (setq rlist (cons (polar pt (* 12 n (/ pi 180)) r) rlist))
  6.     (setq n (1+ n))
  7.     )
  8.   rlist
  9.   )
  10.   (defun blk (ss pt / ss pt doc space objs idx blkobj sArray);无名块
  11.    (vl-load-com)
  12.    (setq doc (vla-get-activedocument (vlax-get-acad-object))
  13.          space (if (= (vla-get-activespace doc) 1)
  14.                        (vla-get-ModelSpace doc)
  15.                        (vla-get-PaperSpace doc))
  16.          idx     -1)
  17.    (repeat (sslength ss)
  18.        (setq objs (cons (vlax-ename->vla-object (ssname ss (setq idx (1+ idx))))
  19.                                          objs))
  20.        )
  21.    (mapcar '(lambda (e) (vla-move e (vlax-3d-point pt) (vlax-3d-point '(0 0 0)))) objs)
  22.    (setq blkobj (vla-add (vla-get-blocks doc) (vlax-3d-point '(0 0 0)) "*U"))
  23.    (setq sArray (vlax-safearray-fill (vlax-make-safearray  vlax-vbObject  (cons 0 (1- (length objs))))
  24.                                  objs))
  25.    (vla-copyobjects doc sArray blkobj)
  26.    (mapcar 'vla-delete objs)
  27.    (vla-insertblock space (vlax-3d-point pt) (vla-get-name blkobj) 1 1 1 0)
  28.    (mapcar 'vlax-release-object (list doc space blkobj))
  29.    (princ)
  30.    )
  31.   (command "_.ucs" "w")
  32.   (command "_.zoom" "p")
  33.   (setq ss (ssget '((0 . "CIRCLE,ELLIPSE"))) n 0)
  34.   (if ss
  35.   (repeat (sslength ss)
  36.     (setq en (ssname ss n))
  37.     (setq dxfcod (entget en))
  38.     (setq pt (cdr (assoc 10 dxfcod)))
  39.     (cond
  40.       ((= "CIRCLE" (cdr (assoc 0 dxfcod))) (setq r (cdr (assoc 40 dxfcod))))
  41.       ((= "ELLIPSE" (cdr (assoc 0 dxfcod))) (setq r (distance '(0 0 0) (cdr (assoc 11 dxfcod)))))
  42.       )
  43.     (setq ptlist (ptrlist pt r))
  44.     (setq ss1 (ssget "_wp" ptlist))
  45.     (ssadd en ss1)
  46.     (blk ss1 pt)
  47.     (setq n (1+ n))
  48.     )
  49.     )
  50.   )

点评

已测试,不错!只是选到线条超出圆的对象时,就会返回错误,建议加个判断  发表于 2012-1-9 09:52

评分

参与人数 2明经币 +1 金钱 +25 收起 理由
flytoday + 1 + 10 老大出现个函数被取消
【KAIXIN】 + 15 赞一个!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-19 02:19 , Processed in 0.211387 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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