明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2840|回复: 14

[求助]获取线两端点的问题

  [复制链接]
发表于 2004-2-26 08:33:00 | 显示全部楼层 |阅读模式
;;;请选择一条块中或嵌套块中的直线,并且该块的插入点不在世界坐标系原点
;;;这样画出来的直线就偏离实际块所在的位置了,它就认为插入点在界坐标系原点,并且没有旋转,缩放,镜像,移动
;;;如果将这个块给旋转,缩放,镜像,移动后再选择也是这样的,线的位置不会随着块的旋转,缩放,镜像,移动而改变
;;;怎么让这根线的位置不会受到影响呢?我要达到的是外观看上去线的位置和样子(角度)
;;;在嵌套块中用的是嵌套块中第一个块的原点
;;;不要用osnap做
;;;我用矩阵转换做过,nentselp可以返回4X4的矩阵,但水平有限,不太理想,现在源程序也找不到了
;;;请教各位高手,该怎么解决?
;;;请最好用ActiveX方法去做,我对纯Lisp不太懂
(defun c:yy (/ mSpace ename vlaobject)
(vl-load-com)
(setq mSpace (vla-get-ModelSpace
(vla-get-ActiveDocument (vlax-get-acad-object))
)
)
(setq ename (car (nentselp "\n拾取线:")))
(setq vlaobject (vlax-ename->vla-object ename))
(vla-addline
mspace
(vla-get-startpoint vlaobject)
(vla-get-endpoint vlaobject)
)
)
发表于 2020-5-20 14:46:06 | 显示全部楼层
学到了学到了
发表于 2004-2-26 09:44:00 | 显示全部楼层
不知你樣的是不是這個效果 (defun c:tt(/ bl bp en a b os)
(setq bl(entget (car (entsel))))
(setq bp (cdr (assoc 10 bl)))
(setq en (tblsearch "block" (cdr (assoc 2 bl))))
(setq a (cdr (assoc -2 en)))
(setq b (entnext a))
(if (= (getvar "cmdecho") 1) (setvar "cmdecho" 0))
(if (/= (setq os (getvar "osmode")) 0) (setvar "osmode" 0))
(entmake (entget b))
(command ".move" (entlast) "" '(0 0) bp)
(if (= (getvar "cmdecho") 0) (setvar "cmdecho" 1))
(if (= (getvar "osmode") 0) (setvar "osmode" os))
(princ))
 楼主| 发表于 2004-2-26 14:54:00 | 显示全部楼层
要的差不多就是这个效果了,只是用你这个程序在一个无名块中选线时,就会出错,而不是无名块选择时,明明选的是这条线,画出来却又不是这条线,是怎么回事?


麻烦你更新一下,再上传,最好用ActiveX,我看不懂Lisp


谢了
 楼主| 发表于 2004-3-12 17:34:00 | 显示全部楼层
没人能解决吗?
发表于 2004-3-12 17:50:00 | 显示全部楼层
你想用什么语言写?
 楼主| 发表于 2004-3-12 18:29:00 | 显示全部楼层
当然是用VL写了,最好用ActiveX方法。
发表于 2004-3-12 18:32:00 | 显示全部楼层
能在lisp程序中插入块和更改块的属性吗?比如,我本来想插入很多块,而且要更改块的属性,我就想把它有程序写出来,就不必一个一个的操作,能吗
发表于 2004-3-12 18:48:00 | 显示全部楼层
看不太明白你要什么效果
发表于 2004-3-12 20:29:00 | 显示全部楼层
对于块引用的矩阵转换,其它的这里没做。。。 (defun chgcs(ptmcs lst / i x y z item)
(setq i 0
x 0
y 0
z 0
)
(repeat 4
(setq item (nth i lst))
(if (setq xx (nth i ptmcs))
(progn
(setq x (+ x (* xx (car item))))
(setq y (+ y (* xx (cadr item))))
(setq z (+ z (* xx (last item))))
)
(progn
(setq x (+ x (car item)))
(setq y (+ y (cadr item)))
(setq z (+ z (last item)))
)
)
(setq i (1+ i))
)
(list x y z)
)
(defun c:test( / ent ents pt)
(setq ent (nentsel))
(setq ents (entget (car ent)))
(setq pt (cdr (assoc 10 ents)))
(chgcs pt (caddr ent))
)
 楼主| 发表于 2004-3-12 20:47:00 | 显示全部楼层
谢了,其他能否写一下?(好象得寸进尺哦)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-18 03:23 , Processed in 0.193550 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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