乐筑天下

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

问龙龙仔

[复制链接]

124

主题

837

帖子

9

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1333
发表于 2003-6-18 10:24:00 | 显示全部楼层 |阅读模式
上次你回答我如何获得一个块中圆(sub-entity)的圆心坐标,利用nentselp函数得到一个转换矩阵来求得. 如果我不想交互地在屏幕上选取实体,而用程序自动选择,那怎么得到转换矩阵?谢谢版主!
回复

使用道具 举报

29

主题

1152

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1268
发表于 2003-6-18 13:05:00 | 显示全部楼层
先设定对象UCS,再用下列函数护取当前UCS转换矩阵
;;;The ucs matrix function
(defun GETACTIVEUCSMATRIX ()
  ;;(vlax-tmatrix
    (M_REV (append
             (mapcar
               '(lambda        (VECTOR)
                  (append (trans VECTOR 1 0 t) '(0.0))
                )
               '((1.0 0.0 0.0) (0.0 1.0 0.0) (0.0 0.0 1.0))
             )
             (list (append (getvar "ucsorg") '(1.0)))
           )
    )
  ;;)
)
(defun M_REV (A / N U V)
  (setq N 0)
  (repeat (length A)
    (setq U (cons (mapcar '(lambda (V) (nth N V)) A) U)
          N (1+ N)
    )
  )
  (reverse U)
)
回复

使用道具 举报

124

主题

837

帖子

9

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1333
发表于 2003-6-18 15:06:00 | 显示全部楼层
有点不明白,“先设定对象UCS”是什么意思?怎么和GETACTIVEUCSMATRIX 函数连接?
我不知道我的上次问题说的是否明白?就是你给我的程序:
(defun MCS2WCS (TMX P / WX WY WZ)
  (list
    (setq WX
   (+
     (* (car (nth 0 TMX)) (car P))
     (* (cadr (nth 0 TMX)) (cadr P))
     (* (caddr (nth 0 TMX)) (caddr P))
     (cadddr (nth 0 TMX))
   )
    )
    (setq WY
   (+
     (* (car (nth 1 TMX)) (car P))
     (* (cadr (nth 1 TMX)) (cadr P))
     (* (caddr (nth 1 TMX)) (caddr P))
     (cadddr (nth 1 TMX))
   )
    )
    (setq WZ
   (+
     (* (car (nth 2 TMX)) (car P))
     (* (cadr (nth 2 TMX)) (cadr P))
     (* (caddr (nth 2 TMX)) (caddr P))
     (cadddr (nth 2 TMX))
   )
    )
  )
)
;;使用例
(defun C:TT (/ WW TMX P)
  (setq WW (nentselp "\n点选图块中的圆"))
  (setq TMX (caddr WW))
  (setq P (cdr (assoc 10 (entget (car WW)))))
  (MCS2WCS TMX P)
)  
中我不想手工去点选圆实体,怎么办?麻烦你.
回复

使用道具 举报

29

主题

1152

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1268
发表于 2003-6-19 08:02:00 | 显示全部楼层
(defun TT (BNAME / BLKDEF ENT P)
;;;先设定对象UCS,再用下列函数护取当前UCS转换矩阵
;;;The ucs matrix function
  (defun GETACTIVEUCSMATRIX ()
    (M_REV (append
             (mapcar
               '(lambda        (VECTOR)
                  (append (trans VECTOR 1 0 t) '(0.0))
                )
               '((1.0 0.0 0.0) (0.0 1.0 0.0) (0.0 0.0 1.0))
             )
             (list (append (getvar "ucsorg") '(1.0)))
           )
    )
  )
  (defun M_REV (A / N U V)
    (setq N 0)
    (repeat (length A)
      (setq U (cons (mapcar '(lambda (V) (nth N V)) A) U)
            N (1+ N)
      )
    )
    (reverse U)
  )
;;;This is pretty much straight from AutoLISP Programming... by Rawls & Hagen.
;;;tmx: 4x4 transformation matrix from nentselp - (caddr (nentselp))
;;;p: point to transform
  (defun MCS2WCS (TMX P / WX WY WZ)
    (list
      (setq WX
             (+
               (* (car (nth 0 TMX)) (car P))
               (* (cadr (nth 0 TMX)) (cadr P))
               (* (caddr (nth 0 TMX)) (caddr P))
               (cadddr (nth 0 TMX))
             )
      )
      (setq WY
             (+
               (* (car (nth 1 TMX)) (car P))
               (* (cadr (nth 1 TMX)) (cadr P))
               (* (caddr (nth 1 TMX)) (caddr P))
               (cadddr (nth 1 TMX))
             )
      )
      (setq WZ
             (+
               (* (car (nth 2 TMX)) (car P))
               (* (cadr (nth 2 TMX)) (cadr P))
               (* (caddr (nth 2 TMX)) (caddr P))
               (cadddr (nth 2 TMX))
             )
      )
    )
  )
  (defun DO_IT (/ SS N TMX)
    (setq SS (ssget "x"
                    (list (cons 0 "insert")
                          (cons 2 BNAME)
                          (cons 410 (getvar "CTAB"))
                    )
             )
    )
    (command "_.undo" "m")
    (setq N 0)
    (repeat (sslength SS)
      (command "_.ucs" "_ob" (ssname SS N))
      (setq TMX (GETACTIVEUCSMATRIX))
      ;;打印中心坐标(WCS)
      (print (MCS2WCS TMX P))
      (setq N (1+ N))
    )
    (command "_undo" "b")
  )
  (setq        BLKDEF (vla-item (vla-get-blocks
                           (vla-get-activedocument
                             (vlax-get-acad-object)
                           )
                         )
                         BNAME
               )
  )
;;;取出图块中圆心坐标
;;;假设图块中只有一圆,如附图
  (vlax-for ENT        BLKDEF
    (setq P (cdr (assoc 10 (entget (vlax-vla-object->ename ENT)))))
  )
  (DO_IT)
  (princ)
)
附圖
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:2ozmcxnnjff.zip 
下载次数:0  文件大小:7.3 KB  售价:2银币 [记录]
下载权限: 不限 以上或 Vip会员   [开通Vip]   [签到领银币]  [免费赚银币]

回复

使用道具 举报

124

主题

837

帖子

9

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1333
发表于 2003-6-19 09:29:00 | 显示全部楼层
谢谢龙版主,我试成功了;我对没怎么用过VLISP的函数,要明白你的程序看来要花些时间了...谢谢.
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-3 15:05 , Processed in 1.771519 second(s), 78 queries .

© 2020-2025 乐筑天下

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