明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4713|回复: 22

怎样用VL写一个含属性参照的块

  [复制链接]
发表于 2003-11-7 12:47:00 | 显示全部楼层 |阅读模式
请问各位大虾,怎样用VL写一个含属性参照的块?
块中的线用 AddLightweightPolyline 画,
实现的效果就像我们插入一个事先做好了的含属性参照的块一样。
能举个例子吗?谢谢您!!!
"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2003-11-7 13:09:00 | 显示全部楼层
无名块中可以含属性参照吗?
发表于 2003-11-7 13:31:00 | 显示全部楼层
线为什么要用AddLightweightPolyline画?

象你这种效果就没有任何必要做一个程序了,你做一个属性块,用时插入不就可以了吗?
 楼主| 发表于 2003-11-7 13:48:00 | 显示全部楼层
我的程序中的那个块中的图形要参数化(即用AddLightweightPolyline画的部分和属性参照的文字高度)!所以就要编个程序了。
发表于 2003-11-7 14:25:00 | 显示全部楼层
怎么总是有人回答只回答一半?
我问为什么要AddLightweightPolyline画,不管用什么画,只要画出来是你需要的不可以吗?
 楼主| 发表于 2003-11-7 14:49:00 | 显示全部楼层
噢!SORRY!
只要画出来就行,若能用最巧的方法画出来更好!
我说用AddLightweightPolyline画是因为对象就要少一些,谬论!^_^
 楼主| 发表于 2003-11-7 15:10:00 | 显示全部楼层
我试着写了一下,但有几个问题:
1、创建了块和属性参照,但属性参照看不见。
2、若用创建无名块,属性参照也看不见。
3、属性参照的对齐方式及对齐点、旋转角度不会设置。
4、最重要的是,每运行一次该程序,创建的块就会包含上一次运行时创建的图形!
请飞哥帮忙看一下,谢谢了!!!
  1. ;;;
  2. (defun testBlk (/ pt pt1 t2 pt3 pt4 selectedObj ag)
  3.   (setq adoc (vla-get-ActiveDocument (vlax-get-acad-object)))
  4.   (setq mSpace (vla-get-ModelSpace adoc))
  5.   (setq entc (car (entsel)))
  6.   (while (= (car (setq pt (grread 2 4))) 5)
  7.     (setq pt (cadr pt))
  8.     (setq pt2 (vlax-curve-getClosestPointTo entc pt t))
  9.     (SETQ ag (ANGLE pt2 pt))
  10.     (SETQ pt1 (POLAR pt2 (- ag (/ PI 6)) (/ 10 (cos (/ pi 6)))))
  11.     (SETQ pt3 (POLAR pt2 (+ ag (/ PI 6)) (/ 5 (cos (/ pi 6)))))
  12.     (SETQ pt4 (POLAR pt2 (- ag (/ PI 6)) (/ 5 (cos (/ pi 6)))))
  13.     (setq 2dpts (apply 'append (mapcar '3d->2d (list pt1 pt2 pt3 pt4))))
  14.   )
  15.   (setq blocks (vla-get-blocks adoc))
  16.   (setq blockObj (vla-add blocks (vlax-3D-point pt2) "KR_CCD"))
  17.   (setq        pt5 (polar pt2 ag (+ 0.5 5 (/ 3 2)))
  18.         ag2 (/ (* ag 180) PI)
  19.   )
  20.   (setq        attang (COND ((<= AG2 30) (+ AG2 90))
  21.                      ((AND (> AG2 30) (<= AG2 210)) (- AG2 90))
  22.                      ((AND (> AG2 210) (<= AG2 360)) (- AG2 270))
  23.                )
  24.   )

  25.   (setq var1 (getvar "osmode"))
  26.   (setvar "osmode" 0)
  27.   (SSADD (ENTLAST) BL)
  28. (setq attref (vla-addattribute
  29.     blockObj
  30.     3
  31.     acAttributeModePreset
  32.     "粗糙度值"
  33.     (vlax-3D-point pt5)
  34.     "CCD"
  35.     "3.2"
  36.   ))
  37.   (vla-rotate attref (vlax-3D-point pt5) attang)
  38.   (vla-addlightweightpolyline
  39.     blockObj
  40.     (list->VariantArray 2dpts)
  41.   )  
  42.   (setq        blk (vla-insertblock
  43.               mSpace
  44.               (vlax-3D-point pt2)
  45.               "KR_CCD"
  46.               1
  47.               1
  48.               1
  49.               0
  50.             )
  51.   )
  52.   (setvar "osmode" var1)
  53. )


还有,我想用GRREAD函数实现动态,但没成功!
发表于 2003-11-7 15:31:00 | 显示全部楼层
自己看看吧

  1. (defun c:test( / pt doc pl att pt2 p block blocks)
  2.   (setq pt (getpoint "Enter the insert position:"))
  3.   (setq doc (vla-get-activedocument (vlax-get-acad-object)))
  4.   (setq blocks (vla-get-blocks doc))
  5.   (setq block (vla-add blocks (vlax-3d-point pt) "hello"))
  6.   (setq pt2 (polar pt 0 15))
  7.   (setq p (vlax-make-safearray vlax-vbdouble '(0 . 3)))
  8.   (vlax-safearray-fill p (list (car pt) (cadr pt) (car pt2) (cadr pt2)))
  9.   (setq pl (vla-AddLightweightPolyline block p))
  10.   (setq att (vla-Addattribute block 3.5 0 "HELLO" (vlax-3d-point pt) "hello1" "hello2"))
  11.   (princ)
  12. )
 楼主| 发表于 2003-11-7 16:21:00 | 显示全部楼层
刚才网线有问题,不好意思!
这个程序运行后没有看见块呢!但运行后用insert命令倒可以插入刚才建的块。
改为运行后就可看见块,怎样解决呢!(还要用vla-insertblock吧!)
每运行一次该程序,创建的块就会包含上一次运行时创建的图形!
请你看看我上面那个程序,帮忙完善一下!谢谢!!!
发表于 2003-11-7 17:00:00 | 显示全部楼层
你还没理解块是个什么东西。
块是看不见的,是存在数据库中,你插入的只是一个INSERT对象(你用ENTGET查看),INSERT对象是对块的引用而已,它并不是一个块。
已经给你写出了功能实现了,剩下的还不简单?你说了你很努力的,怎么也跟别人一样,就知道让别人写完整的,不自己思考。完成龙龙仔给你的任务那股劲怎么没了?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-7-21 04:14 , Processed in 0.226907 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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