明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1654|回复: 2

[基础] 那位,看看能否跟进一下LSP

[复制链接]
发表于 2010-8-2 12:41:00 | 显示全部楼层 |阅读模式

曾在网上看过梦断江南写的改块插入点程序,发现改属性块时出问题,一旦用梦断江南的改一下属性文字会跑位那位看能否跟进一下,对了,

贴一下梦断江南的代码先

 

 

;| c:chbkins = 保持参照块位置,改块插入点(only for 平面块)-----------ok!!完成--------梦断江南.lxx.2004.10
支持:wcs,ucs, 不等比参照块.镜像块.
命令: chbkins
|;
(defun c:chbkins ( / *doc e p000 p1e p1 p2 p2x bkobj ss lst)
  (while (not(and (princ "\n请选择一个块参照:")
           (setq s (ssget ":S:E" '((0 . "INSERT"))))
  )))
  (setq *doc (vla-get-activedocument(vlax-get-acad-object))
 p000 (list 0. 0. 0.)
        e    (ssname s 0)
 bkn  (xdxf e 2)                                   ;;块名.
 p1e  (xdxf e 10)                                  ;;块插入点wcs,dcs.
 p1   (trans p1e e 1)                              ;;块插入点ucs.
        p2   (getpoint p1 "\n选择新的块插入点:"))         ;;新插入点ucs.
  (if p2
    (progn
      (setq p2x (x-inspttrans e (trans p2 1 0)) ;;块定义相对位移点.wcs.
     bkobj (vla-item (vla-get-blocks *doc) bkn)    ;;取得块定义实体.
            ss   (ssget "x" (list '(0 . "INSERT") (cons 2 (xdxf e 2))))
      )
      ;;重新定义块---改插入点.
      (vlax-for i bkobj (setq lst (cons i lst)))
      (mapcar '(lambda (x) (vla-move x (ptx p2x) (ptx p000))) lst);;ok!
      ;;移动块参照,使其位置保持原状.
      (mapcar '(lambda (x)(vla-move(x2o x)(ptx (xdxf x 10))(ptx (x-insptbak x p2x))))(xss2lst ss))
    )
  )
  (princ)
)
;;********************************************************************************
;;(x-inspttrans e pt) = 转换新插入点为原始块定义相对定位点wcs(位移向量)-----ok!
(defun x-inspttrans (e pt / obj atts attv p ang xs ys zs ) ;;for wcs
  (setq p000  (list 0. 0. 0.)
 obj   (vlax-ename->vla-object e)
 p     (xdxf e 10)
 atts '(rotation xscalefactor yscalefactor zscalefactor)
 attv  (mapcar '(lambda(x)(vlax-get obj x)) atts))
  (mapcar 'set '(ang xs ys zs) attv)
  (setq pt (polar p000 (- (angle p pt) ang) (distance p pt))
 pt (mapcar '/ pt (list xs ys zs)))
)
;;********************************************************************************
;;根据位移向量pt反求块原来的插入点wcs.------------------ok!
(defun x-insptbak (e pt / obj atts attv p ang xs ys zs) ;;for wcs
  (setq p000  (list 0. 0. 0.)
 p     (xdxf e 10)
        obj   (vlax-ename->vla-object e)
 atts '(rotation xscalefactor yscalefactor zscalefactor)
 attv  (mapcar '(lambda(x)(vlax-get obj x)) atts))
  (mapcar 'set '(ang xs ys zs) attv)
  (setq pt (mapcar '* pt (list xs ys zs))
 pt (polar p (+ (angle p000 pt) ang) (distance p000 pt)))
)
;; 点转换为 vla点.
(defun ptx (pt)
  (if (= (type pt) 'variant)
    pt
    (vlax-3d-point pt)
  )
)
;; 取得实体dxf值.
(defun xdxf (e id)
  (cdr(assoc id (entget e)))
)
;;(xss2lst ss) = 选集实体名列表.
(defun xss2lst (ss / i lst)
  (setq i -1)
  (while (setq e (ssname ss (setq i (1+ i))))
    (setq lst (cons (xdxf e -1) lst))
  )(reverse lst)
)
;;
(defun x2o (eobj)
  (if (= 'ENAME (type eobj))
    (vlax-ename->vla-object eobj)
    eobj
  )
)

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2010-8-2 12:43:00 | 显示全部楼层
能否改了属性块的插入点后属性块的文字不跑位,那位高手给看看能否改一下
发表于 2010-8-2 12:51:00 | 显示全部楼层

类似问题我曾也遇到过,也曾好像问过明总好像,后来好像它没有时间帮看看,没辙,咱也期待有人能解决这个问题

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

本版积分规则

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

GMT+8, 2024-10-2 08:21 , Processed in 0.175403 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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